繁体   English   中英

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

[英]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。

我想到的是:

  • 检查JDK是否完全与泛型兼容(以便JSE中的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 ,从而使其具有通用性。

希望这可以帮助。

参考:Java编程教程-泛型

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM