Java 为什么更喜欢间接泛型';导入到实际类?

Java 为什么更喜欢间接泛型';导入到实际类?,java,generics,compiler-errors,Java,Generics,Compiler Errors,如果我在包mypack中编写此接口,则使用eclipse: package mypack; public interface MyInterface<A>{ public interface Test{ void sayHi(); } } 包mypack; 公共接口MyInterface这里发生的是 Test test = new Test(); Test被视为继承自的MyInterface的嵌套类型 我将查看JLS,看看它选择继承类而不是自己的名称是否有原因 注

如果我在包
mypack
中编写此接口,则使用eclipse:

package mypack;
public interface MyInterface<A>{
  public interface Test{
    void sayHi();
  }
}
包mypack;

公共接口MyInterface

这里发生的是

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
}
顺便说一句:由于这是一个非常混乱的类结构和名称组合,我建议你在现实中永远不要这样做

来自

JavaSE平台提供未命名的包主要是为了方便开发小型或临时应用程序或刚开始开发时使用


如何在一个具体的类中扩展接口?我不明白你为什么要实现
sayHi
@PeterLawrey我也不知道:我自己试试,这是问题的关键,JB:)我现在明白了。但任何解决方案都比选择一个更好的、不冲突的名称更糟糕。这与默认包无关。所有东西都在mypack包中。@jbnize这不是问题所在,但你是对的,在这种情况下这无关紧要。是的,我知道。我甚至在你的问题下写了一条评论。正如我所说:我错过了问题中的“没有一揽子计划”。但同样,解决方案非常简单:永远不要在默认包中放入任何类。这样做是不好的做法,会导致各种各样的问题(包括你所面临的问题)。避免不良实践时,一切都会变得更加顺利:它们是有充分理由的不良实践。@PeterRader如果问题中不是嵌套接口,我建议您更新您的问题。因此eclipse中存在一个bug,因为如果我点击
new Test()
,它将引导我到类,而不是接口。我会报告一个错误!我把你的意思和
子类型混为一谈,在我看来,子类型不是嵌套类型。
interface MyInterface {
    interface Test {
    }
}

class Test extends MyInterface {
    Test test = new Test(); // thinks this is the MyInterface.Test
}