如果我在包mypack
中编写此接口,请使用eclipse:
package mypack;
public interface MyInterface<A>{
public interface Test{
void sayHi();
}
}
如果我在没有包中写这个课。
public class Test implements mypack.MyInterface<mypack.MyInterface.Test> {
private Test test = new Test();
}
Eclipse在编译时触发了一个错误,我必须实现方法sayHi()
。
我看不出来了!
如果我 Ctrl + LMB 到字段test
的类型,它会把我带到班级。
此处报告了一个小错误:https://bugs.eclipse.org/bugs/show_bug.cgi?id=488077
答案 0 :(得分:2)
这里发生的事情是
Test test = new Test();
Test
被视为您继承的MyInterface
的嵌套类型。
我将查看JLS,看看是否有理由选择继承的类而不是它自己的名字。
注意:MyInterface
不一定是通用的。这个问题的一个更简单的形式是
interface MyInterface {
interface Test {
}
}
class Test extends MyInterface {
Test test = new Test(); // thinks this is the MyInterface.Test
}
BTW:由于这是类结构和名称的混淆,我建议你永远不要这样做。
的说明
Java SE平台提供了未命名的软件包,主要是为了方便开发小型或临时应用程序或刚开始开发时。