[問題] member interface不用static import?

看板java作者 (匡匡56)時間11年前 (2013/10/24 23:26), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串1/2 (看更多)
根據 The Java Language Specification Java SE 7 Edition P.187 Member interfaces (§8.5) are implicitly static so they are never considered to be inner classes. 所以只要是member interface (你也可以叫nested interface)都是會自動成為 static ,不管你有沒有寫出static這個關鍵字. /* Test.java */ import static com.demo.now.Test3.Interface; public class Test{ public static void main(String[] args){ Interface iface = new Interface(){ public void method(){ System.out.println("hello"); } }; iface.method(); } } /*Test3.java*/ package com.demo.now; public class Test3{ public interface Interface{ public final int CONSTANT = 12345; public void method(); } } 我的問題是,我把別的套件內的物件的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 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 36.231.237.10

10/25 00:39, , 1F
會這樣嗎?interface/class 應該都可不 static import
10/25 00:39, 1F
文章代碼(AID): #1IQJmCCz (java)
文章代碼(AID): #1IQJmCCz (java)