作者kuangjc5566 (匡匡56)
看板java
标题[问题] member interface不用static import?
时间Thu Oct 24 23:26:00 2013
根据
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
1F:→ sbrhsieh:会这样吗?interface/class 应该都可不 static import 10/25 00:39