“ArrayList类型不通用”是什么意思?

时间:2012-05-11 18:58:02

标签: java

我是Java的新手并且正在尝试学习程序员可以使用的各种集合。我导入了" java.util"在Eclipse中的剪贴簿中检查以下代码。

ArrayList<String> list = new ArrayList<String>();
list.add("test1");
list.add("test2");

我收到了这个输出。

The type ArrayList is not generic; it cannot be parameterized with arguments <String>
Syntax error, parameterized types are only available if source level is 5.0
The type ArrayList is not generic; it cannot be parameterized with arguments <String>
Syntax error, parameterized types are only available if source level is 5.0

这个错误是什么意思?我没有制作通用数组列表;我制作了一个字符串数组列表。此外,什么是&#34;源级&#34;?

3 个答案:

答案 0 :(得分:10)

Eclipse中的Java版本设置为1.4,java中的泛型仅在Java 5中引入。

在eclipse中将JDK更改为1.5或更高版本,以解决此问题。

您可以Project - > Java Build Path - > Libraries

检查您的JDK

如果您在此处看到它是Java 1.5或更高版本,请检查编译器合规性是否设置为5及以上。

您可以查看Project - > Java Compiler

编辑:

向Eclipse添加新的jdk

右键单击项目 - &gt; Java构建路径 - &gt;图书馆 - &gt;添加库 - &gt; JRE系统库 - &gt;已安装的库 - &gt;添加 - &gt;标准VM - &gt;提供您的安装位置,然后按确定

请注意,在已安装的JRE列表中,请确保检查Java 7。

答案 1 :(得分:4)

我想到了什么:

  • 检查JDK是否完全符合泛型(以便JSE中的ArrayList类实际上是泛型类)
  • 检查您是否有其他ArrayList具有范围优先权并覆盖标准库定义

答案 2 :(得分:1)

是的,1.5及以上的问题就消失了。感觉这个问题并没有完全解决,如果有人遇到这个问题我会增加2美分。它主要是关于这部分问题:

  

我没有制作通用数组列表;我制作了一个字符串数组列表。

提到的错误消息:

  

&GT; ArrayList类型不是泛型;它不能使用参数&lt; String&gt;

参数化      

&GT;语法错误,参数化类型仅在源级别为5.0

时可用

它的实际含义是,自Java 1.5以来我们也可以使用Type参数(其中一个用于使用值参数)。 JDK 1.5引入了泛型,它允许我们抽象类型(或参数化类型)。

类设计者可以泛型关于定义中的类型。 arrayList实现如下:

public class ArrayList<E> implements List<E> .... {
    // Constructor
    public ArrayList() {...}

    // Public methods
    public boolean add(E e) {...}
    public void add(int index, E element) {...}
    public boolean addAll(int index, Collection<? extends E> c) {...}
    public abstract E get(int index) {...}
    public E remove(int index) {...}
    ...
}

E 可以任何类型,如String或Integer等。因此名称泛型 arrayList。

在对象实例化或方法调用期间,用户可以在类型中具体,这在本例中完成,如下所示:

ArrayList<String> list = new ArrayList<String>();

(如果我没错,那在上述情况下是混乱: - ))

泛型的使用示例(如果需要):

// Declaring a DAO layer
public interface IMasterAbstractDao<E, I> {
    public E findById(I id) {...}
    public void delete(E e) {...}
    public List<E> findByCriteria(Criterion criterion) {...}
}

E 是返回的实体类型。这可以用于系统中定义的所有模型beans,使其成为通用的。

希望这有帮助。

Reference: Java Programming Tutorial - Generics