Re: [問題] member interface不用static import?
※ 引述《kuangjc5566 (匡匡56)》之銘言:
: [略]
: 我的問題是,我把別的套件內的物件的member interface (nested interface)
: import進來時,因為member interface是自動成為static的,所以應該是要這樣寫
: import static com.demo.now.Test3.Interface;
: 也就是我上面po出的完整程式碼的內容
: 是可以成功編譯跟執行的
: 但是我發現你把static拿掉變成
: import com.demo.now.Test3.Interface;
: 還是能夠編譯成功,程式也能正常執行
: 有人能夠解釋為什麼可以成功編譯嗎?
: 就我所學的,當我寫成
: import com.demo.now.Test3.Interface;
: javac應該要抱怨找不到Interface不是嗎?
: 而且這個現象只發生在nested interface上
: 要是static nested class就一定要用import static 的語法才能成功編譯
: 否則javac會出現error 說找不到你所指的static nested class
: 我用的是javac 1.7.0_40
你測試的做法可能有點問題,導致你獲得上述錯誤的結論。
在尚未引進 static import 時(pre 1.5),import declaration 只有兩種:
1. 沒有使用 * 字元來 import 單一 Type(Single-Type-Import)
2. 有使用 * 的 import declaration(Type-Import-on-Demand)
就第一種寫法來說,你指定一個 type 的 full-qualified name 來 import 之,
就可以使用其 simple name 來 identify 這個 type。
你的測試碼中的 Test3.Interface 不管是 nested interface or class,不論
是 static or non-static,它的 full-qualified name 都是
com.demo.now.Test3.Interface,故皆可以
import com.demo.now.Test3.Interface;
這樣子的 import declaration 使得可以使用其短名(Interface)來指稱之。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.172.228.23
討論串 (同標題文章)