2016-08-02 87 views
1

我必须使用泛型为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 

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

+0

“list”和“item”的类型是什么? –

+0

我们可以请您提供完整的课程代码吗?这会让它变得更容易 –

+0

如果可以,请发布一个MCVE(http://stackoverflow.com/help/mcve) – Bajal

回答

4

根据你的错误,你有两个类型变量叫做E,一个在类中,另一个在方法addItem中。您应该简单地从addItem方法中删除类型参数。

变化

public <E> boolean addItem (E item) 

public boolean addItem (E item) 

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

+0

或' boolean addItem(T item)' – Andrew

+0

这解决了这个问题,谢谢。 –