java – 为什么更喜欢间接泛型导入到实际的类?

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

点赞