如果我在包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().
我看不出来了!
如果我将LMB控制为字段测试的类型,它会将我带到类.
Bug报道
这里报告了一个小错误:https://bugs.eclipse.org/bugs/show_bug.cgi?id=488077
最佳答案 这里发生的事情是
Test test = new Test();
测试被视为您继承的MyInterface的嵌套类型.
我将查看JLS以查看是否有理由选择继承的类而不是它自己的名称.
注意:MyInterface不必是通用的.这个问题的一个更简单的形式是
interface MyInterface {
interface Test {
}
}
class Test extends MyInterface {
Test test = new Test(); // thinks this is the MyInterface.Test
}
顺便说一句:由于这是类结构和名称的非常混乱的组合,我建议你永远不要在现实中这样做.
JLS 7.4.2的一张纸条
Unnamed packages are provided by the Java SE platform principally for convenience when developing small or temporary applications or when just beginning development.