[英]What does “The type ArrayList is not generic” mean?
我是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
这个错误是什么意思? 我没有列出通用数组列表; 我做了一个字符串数组列表。 此外,什么是“源级别”?
您在Eclipse中将Java版本设置为1.4,仅在Java 5中引入了Java中的泛型。
在eclipse中将JDK更改为1.5或更高版本可以解决此问题。
您可以按Project - > Java Build Path - > Libraries
检查JDK
如果在此处看到它是Java 1.5或更高版本,则检查编译器的Compliance是否设置为5或更高版本。
您可以检查Project - > Java Compiler
编辑:
向Eclipse添加新的jdk
右键单击项目-> Java构建路径->库->添加库-> JRE系统库->已安装的库->添加->标准VM->提供安装位置,然后按确定
请注意,在“已安装的JRE”列表中,请确保您已检查Java 7。
我想到的是:
ArrayList
类实际上是泛型类) ArrayList
是的,问题在1.5及更高版本中消失了。 好像这个问题没有完全解决,我加了2美分,以防有人遇到这个问题。 主要是关于问题的这一部分:
我没有列出通用数组列表; 我做了一个字符串数组列表。
错误消息提到:
> ArrayList类型不是通用的 ; 不能使用参数<String>对其进行参数化
>语法错误,仅当源级别为5.0时, 参数化类型才可用
实际的意思是,由于Java 1.5,我们也可以使用Type参数(其中一个曾经使用过value参数)。 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是返回的实体类型。 它可以用于系统中定义的所有Model Bean ,从而使其具有通用性。
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.