我正在尝试创建一个名为“ OrderedList”的泛型类,该类使用泛型类型数组通过预定义的类型存储特定类型。我在看似简单的操作上遇到了麻烦,但我不明白为什么。这是我的代码。
public OrderedList() {
list = (T[]) new Object[100];
size = 0;
}
public <T extends Comparable<T>> void add(T o) {
if (size == list.length) resize();
list[size] = o;
for (int i = 0; i < size; i++) {
o.compareTo((T) list[i]);
}
size++;
}
private void resize() {
int newSize = (int) (1.5 * (double) list.length);
T[] newArray = (T[]) new Object[newSize];
for (int i = 0; i < size; i++) {
newArray[i] = list[i];
}
list = newArray;
}
我遇到的错误是add方法的第二行“ list [size] = o”。它为我提供了一个错误消息,指出“类型不兼容。要求:T。找到:T”。另外,每当我使用<T extends Comparable<T>>
的实例化时,该错误就会消失,但随后我将无法比较要在通用数组中排序的两个对象。
有人可以帮助我吗?我真的对此感到困惑。任何帮助表示赞赏。
答案 0 :(得分:4)
您需要将T extends Comparable<T>
放在 class 签名中,而不是 method 签名。
class OrderedList<T extends Comparable<T>> {
T[] list;
int size;
public OrderedList() {
list = (T[]) new Object[100];
size = 0;
}
public void add(T o) {
if (size == list.length) resize();
list[size] = o;
for (int i = 0; i < size; i++) {
o.compareTo((T) list[i]);
}
size++;
}
private void resize() {
int newSize = (int) (1.5 * (double) list.length);
T[] newArray = (T[]) new Object[newSize];
for (int i = 0; i < size; i++) {
newArray[i] = list[i];
}
list = newArray;
}
}