Java泛型-消失类型信息?

Java泛型-消失类型信息?,java,generics,Java,Generics,好的-我知道Java泛型可能是粗心者的雷区,但我只是遇到了一个非直觉(无论如何对我来说)行为,我想知道是否有人可以解释:首先,这里有一个编译的类: public class Dummy { public List<? extends Number> getList() { return new ArrayList<Number>(); } public static void main(String[] args) { Dum

好的-我知道Java泛型可能是粗心者的雷区,但我只是遇到了一个非直觉(无论如何对我来说)行为,我想知道是否有人可以解释:首先,这里有一个编译的类:

public class Dummy {

   public List<? extends Number> getList() {
      return new ArrayList<Number>();
   }

   public static void main(String[] args) {
      Dummy dummy = new Dummy();
      for (Number n: dummy.getList()) {
         System.out.println(n);
      }    
   }
}
公共类虚拟{

public List一般的想法是,如果使用参数化类型的原始版本,所有与类型相关的信息都会被删除。这包括类类型参数或泛型方法参数隐含的类型信息


描述了非常相似的示例。

我以前遇到过这个问题,但解释它可能会导致您进一步混淆,因此我将您链接到关于“”的JLS部分你可以通过阅读来完全理解发生了什么,如果你不明白,你可以带着进一步的问题回来。

请粘贴确切的编译器消息。目前,你正在解释实际的消息,然后让人们解释你的解释。这不起作用。这个片段实际上没有编译。它缺少im列表类的端口。好的,你是对的,我省略了导入。我假设它们是必需的,包括它们只会给示例代码增加噪音。(我还省略了一个事实,即这个代码段应该在名为Dummy.java的文件中,位于源代码树的顶级包中…)我已经添加了错误消息以获取信息。添加博客文章的摘要对未来的访问者来说很好。无法从工作中阅读您的博客,因此这是一个非答案(没有摘要)。谢谢。知道为什么要强制执行此规则吗?(特别是当类上的声明与方法声明完全正交时…)否:(唯一的想法是:*帮助javac开发人员;*强制开发人员避免使用原始类;
public class Dummy<T> {
Dummy<?> dummy = new Dummy();