我是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;?
答案 0 :(得分:10)
Eclipse中的Java版本设置为1.4,java中的泛型仅在Java 5中引入。
在eclipse中将JDK更改为1.5或更高版本,以解决此问题。
您可以Project - > Java Build Path - > Libraries
如果您在此处看到它是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)
我想到了什么:
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,使其成为通用的。
希望这有帮助。