作者sbrhsieh (十年一梦)
看板java
标题Re: [问题] member interface不用static import?
时间Fri Oct 25 01:29:37 2013
※ 引述《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