为什么更喜欢间接通用的导入到实际的类?

时间:2016-02-19 07:55:33

标签: java generics compiler-errors

如果我在包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

1 个答案:

答案 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:由于这是类结构和名称的混淆,我建议你永远不要这样做。

来自JLS 7.4.2

的说明
  

Java SE平台提供了未命名的软件包,主要是为了方便开发小型或临时应用程序或刚开始开发时。

相关问题