如何解决代码中的不兼容类型

时间:2016-08-02 19:41:18

标签: java compiler-errors

我必须使用泛型为java赋值实现我自己的ArrayList类。出于某种原因,我遇到了不兼容的类型错误,而我在其他地方寻求帮助时失败了。

这是我的代码后面跟着确切的错误:

public <E> boolean addItem ( E item ) 
{           
    if ( numElements == list.length ) {             
        enlarge();
        list [numElements] = item;
        numElements ++;
        return true;
    } else {                
        list [numElements] = item;
        numElements ++;
        return true;
    }
}

错误:

ArrayList.java:91: error: incompatible types
                        list [numElements] = item;
                                             ^(points at item)
  required: E#2
  found:    E#1
  where E#1,E#2 are type-variables:
    E#1 extends Object declared in method <E#1>addItem(E#1)
    E#2 extends hasKey declared in class ArrayList

如果在其他地方已经回答我道歉,我只是不确定我应该寻找什么来找到我需要的答案。

1 个答案:

答案 0 :(得分:4)

根据您的错误,您有两个名为E的类型变量,一个在类级别,另一个在方法addItem中。您只需从addItem方法中删除type参数。

更改

public <E> boolean addItem (E item)

public boolean addItem (E item)

这同样适用于具有表示ArrayList成员类型的泛型类型参数的类的任何其他非静态方法。它们都应该使用类级别中声明的泛型类型参数。