【问题标题】:The type Collection is not generic; it cannot be parameterized with arguments <? extends E>Collection 类型不是通用的;它不能用参数参数化 <?扩展 E>
【发布时间】:2009-11-26 15:23:45
【问题描述】:

Eclipse Galileo 有一个奇怪的问题。
我将 Java 1.6 设置为我的 JRE。在这行代码

List templates = new ArrayList ();

我在 Eclipse 的问题列表中看到以下错误:

Collection 类型不是泛型的;它不能用参数进行参数化

我在使用 Ant 构建这个项目时没有任何问题。
我该如何解决?看起来这是一个 Eclipse 问题,但由于这个错误,我无法从 IDE 编译/发布我的项目。

【问题讨论】:

  • 您的错误实际上是在该行号上吗?如果您执行以下操作,则错误在哪一行:列出模板;新的 ArrayList();不要在第二行做作业,让我知道会发生什么。看起来你有一些自定义 Collection 类来自那个不属于签名的错误:Collection... 这没有意义。

标签: java eclipse generics


【解决方案1】:

您要导入什么List? (见thread from 2006

java.awt.Listjava.util.List?

因为 eclipse 很适合 cmets,java.awt.List 没有被参数化 ;)


检查一下


除此之外,当最新的 Eclipse 3.1 beta 支持 J2SE5 时,back in 2005 出现了很多问题,但从那以后这个问题就得到了解决。

尝试在您的项目中使用最新的 JDK6。

【讨论】:

  • 好收获。我最喜欢的一个(当我不注意时) - 另一方面 - 它建立在 ant 之上,不抱怨 List 而是抱怨 Collection。
【解决方案2】:

虽然晚了,但仍在回复,可能对仍然面临问题的其他人有所帮助。 我遇到了完全相同的问题。该列表适用于 util.List。解决方案是订购图书馆的出口。 如果您使用的是 Maven 或任何其他库:

在项目中 -> 构建路径 -> 配置构建路径 -> 订单和导出

检查“JRE 系统库”应高于“Maven 依赖项”

这对我有用。

【讨论】:

  • 这对我也有用。问题是 Eclipse Jetty(HTTP 服务器)引入了一个名为 osgi Foundation 的 Apache Felix jar,其中包含重新打包的 java.util.List!
  • 天啊!这对我也有用。节省了大量时间。谢谢。
【解决方案3】:

对于那些将从 Google 那里获得成功的人:问题出在 cryptix 库上。当我从 java 构建路径中删除它时,项目已成功编译。

【讨论】:

    【解决方案4】:

    你给你的班级名单命名了吗?即:

    import java.util.*;
    
    public class List {   // can't do this, name this something else.
    
        public static void main(String[] args) {
            List<Integer> l = new ArrayList<Integer>();
    
        }
    
    }
    

    【讨论】:

      【解决方案5】:

      嘿,我删除了神秘库,但它不起作用。但是后来我把 JRE 系统库放在了顶部,它就起作用了。真奇怪。

      【讨论】:

      • 右键项目->Java Build Path->Order and Export将JRE System Library [jkd1.6]移到顶部。为我工作。
      • 因为以下原因为我工作:“import java.util.List;”正在导入一个早于泛型的列表。一种查找方法是 Eclipse 中的 Ctrl +“左键单击”;如果它打开接口定义不是“公共接口列表扩展集合”的List.class,那么它正在导入一个不知道泛型的列表。
      【解决方案6】:

      有时这是一个 Eclipse 打嗝,eclipse -clean 加上刷新所有项目会有所帮助。

      编辑

      当您将代码替换为:

      java.util.List templates = new java.util.ArrayList();
      

      甚至

      java.util.List<Object> templates = new java.util.ArrayList<Object>();
      

      ?

      【讨论】:

      • 我已经试过了。我还尝试删除 .metadata 文件夹并重新创建工作区。
      【解决方案7】:

      将条目“JRE System Library...”放在项目、属性、java 构建路径、顺序和导出的顶部

      【讨论】:

        【解决方案8】:

        使用“导入 java.util.List”

        而不是默认导入“import antlr.collections.List;”

        并使用 JRE5 或更高版本对集合 API 的通用支持....

        【讨论】:

          【解决方案9】:

          例如:

          public class AClass<T extends Object>
          {
           public HashMap<String, String> myMap;
          }
          

          如果我写:

          public class BClass
          {
          
          private AClass aClass = new AClass();
          
          public void test()
          {
          
          aClass.get("test");
          //return Object class
          
          }
          
          }
          

          但如果我写:

          public class BClass
          {
          
          private AClass<?,?> aClass = new AClass<?,?>();
          
          public void test()
          {
          
          aClass.get("test");
          //return String class
          
          }
          
          }
          

          【讨论】:

            【解决方案10】:

            我改变了导入

               import javax.swing.text.html.HTMLDocument.Iterator;
            

               import java.util.Iterator;
            

            然后它对我有用

            【讨论】:

              【解决方案11】:

              一些想法:

              • 检查项目中使用的 JRE 库(检查包资源管理器)。
              • 在 Eclipse 设置中检查已安装的 JRE(与 ant 使用的相同)。
              • 注释掉该行只是为了检查它是否真的是错误原因。
              • 从头开始重新输入整行。
              • 在新文件夹(测试)中安装新(干净)版本的 eclipse。

              【讨论】:

                【解决方案12】:

                使 java buildpath 引用大于或等于 java 1.5

                或者你尝试添加“import java.util.List”语句然后你可以看到

                eclipse 说它与其他一些 List 类型冲突

                例如它可能与 com.lowagie.xx.xxx.List 等冲突,尽量避免这些导入

                声明

                【讨论】:

                  【解决方案13】:

                  尝试删除import antlr.collections.List;并点击Ctr+空格使用java.util

                  【讨论】:

                    猜你喜欢
                    • 2016-06-01
                    • 2015-06-15
                    • 2013-04-30
                    • 2019-06-18
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多