【问题标题】:Implementation of a set using ArrayList in a generic class在泛型类中使用 ArrayList 实现集合
【发布时间】:2013-12-27 17:41:13
【问题描述】:

我正在尝试使用 arrayList 实现一个集合,我想创建 2 个构造函数。一个空的一个和一个得到一个数组并添加它:

        public class set<E> {
        Set <E> setList;
        ArrayList<E> elementList;

        public set(){

            setList = (Set<E>) new ArrayList();
        }

        public <E> set(E[] inputArray){
            super();
            for(E element: inputArray) // not working
                setList.add( element);
            // setList.addAll(Arrays.asList(inputArray)); - not working either
        }

第二个构造函数出现错误:

"类型集中的方法add(E)不适用于参数 (E)"

【问题讨论】:

  • 你打算用(Set&lt;E&gt;) new ArrayList()做什么?
  • 您是否在构造函数声明中阅读了由&lt;E&gt; 引起的警告?删除&lt;E&gt;
  • @arshajii:联合、交叉、删除..

标签: java generics arraylist set


【解决方案1】:

您需要删除构造函数声明中的&lt;E&gt;

    public <E> set(E[] inputArray){
           ^^^ Get rid of this

就目前情况而言,您正在创建第二个不相关的泛型类型参数,称为 E,它会影响 set&lt;E&gt; 中的 E

【讨论】:

    【解决方案2】:

    将方法set(E[])改成如下:

    public Set(E[] inputArray) {
        super();
        for(E element: inputArray) {
            setList.add(element);
        }
    }
    

    原因:

    类型E 已经是使用Set&lt;E&gt; 创建的泛型类型,因此您无需在构造函数中重新定义E

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-27
      • 1970-01-01
      • 2018-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多