java - 扩展泛型类时遇到问题
问题描述
我正在尝试创建一个名为“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>>
,该错误就会消失,但是我无法比较我试图在通用数组中排序的两个对象。
谁能帮我?我真的很困惑。任何帮助表示赞赏。
解决方案
您需要将 放在T extends Comparable<T>
类签名中,而不是方法签名中。
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;
}
}
推荐阅读
- r - 使用 R 解析语音转录本
- node.js - 为什么我只在 MAC OSX 中的代理调用上不断收到 ECONNRESET 错误,对于一些成功的调用完全是任意的(非常绝望)
- server - 值是字符串或 ID 的 Prisma 查询字段
- intellij-idea - com.intellij.openapi.project.IndexNotReadyException 文档
- python - 服务器与本地机器上 dict 键的随机顺序
- angular - 如何在角度前端显示整数值?
- cucumber - 如何从一个特征文件表中读取数据并传递值以在空手道的 *.json 文件中设置 json 参数?
- python - 如何替换 keras 中预训练神经网络的前几层?
- fortran - Very simple Fortran code produces error when compiled with gfortran + fpe trap flags
- python - 填充轮廓图,同时覆盖在另一个图像上