我有一个赋值,只允许我更改方法的签名。我有一个类实用程序和一个测试类。我遇到的问题是,我总是在争论中出错。这是公用事业类
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)
。这将起作用,你的测试将通过。