[問題] member interface不用static import?
根據
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
10/25 00:39, 1F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):
java 近期熱門文章
PTT數位生活區 即時熱門文章