实用程序类型中的方法mergeList(List)<Integer><Integer>不适用于参数(List<Number>)



我有一个赋值,只允许我更改方法的签名。我有一个类实用程序和一个测试类。我遇到的问题是,我总是在争论中出错。这是公用事业类

public class Utility <T extends Comparable<T>> {  //Change this line to create a parameterized class

// Insert your code here
public ArrayList<T> list;

public Utility() {
list = new ArrayList<T>();
}

public Utility (List<T> list) { 
this.list = (ArrayList<T>) new ArrayList<>(list);
}
public void mergeList(List<T> list) { //This is the method that the error refers to
for (T obj: this.list)
list.add(obj);
}
}

这是一个不断给我错误的测试

void testMergeList2() {
List<Integer> myList = new ArrayList<Integer>(); 
myList.add(0); 
myList.add(1); 
myList.add(2); 
myList.add(3); 
Utility<Integer> ut = new Utility<Integer>(myList); 
List<Number> myList2 = new ArrayList<Number>(); 
myList2.add(0); 
myList2.add(1); 
myList2.add(2); 
myList2.add(5); 
ut.mergeList(myList2);      //This is where I get the error 
boolean actual = true;
for (int i= 0; i < 4; i++) {
if ((Integer) myList2.get(i) != i || (Integer)myList2.get(i+4)!= i) {
actual = false; 
break; 
}
}
boolean expected = false; 
assertEquals(expected, actual, "mergeList Failed! " + expected + " expected but "+ actual + " is given");


}

我尝试将T更改为其他内容,但编译器告诉我强制转换T,这是不允许的,因为我无法更改方法的主体。

您的实用程序使用Integer声明,而myList2使用Number。这些是不兼容的类型。

为了解决此问题,请将mergeList(List<T> list)更改为仅mergeList(List list)。这将起作用,你的测试将通过。

最新更新