![](/img/trans.png)
[英]Why is my generic implementation not working? (extends Comparable<? super T>>)
[英]How return a generic array of <T extends Comparable<? super T>> in Java?
我想弄清楚為什么我的 IDE 會提醒我這個:
Incompatible types: required T[], found T[]
。
代碼在以下代碼段中:
public abstract class SearcherGenerics<T extends Comparable<? super T>> {
private T[] array;
private int k;
SearcherGenerics(T[] array, int k) {
this.array = array;
this.k = k;
}
public <T extends Comparable<? super T>> T[] getArray() {
return array;
}
int getIndex() { return k; }
abstract public <T extends Comparable<? super T>> T findElement() throws IndexingError;
}
擴展 SearcherGenerics 的 CleverSearcherGenerics:
public class CleverSearcherGenerics<T extends Comparable<? super T>> extends SearcherGenerics<T> {
CleverSearcherGenerics(T[] array, int k) {
super(array, k);
}
@Override
public <T extends Comparable<? super T>> T findElement() throws IndexingError {
T[] bigArray = getArray();
int k = getIndex();
if (k <= 0 || k > bigArray.length) {
throw new IndexingError();
}
T[] smallArray = Arrays.copyOfRange(bigArray, 0, k);
Arrays.sort(smallArray);
for (int i = k; i < bigArray.length; i++) {
if (bigArray[i].compareTo(smallArray[0]) > 0){
smallArray[0] = bigArray[i];
int j = 0;
while ((j < k - 1) && (smallArray[j].compareTo(smallArray[j + 1]) > 0)) {
T temp = smallArray[j];
smallArray[j] = smallArray[j + 1];
smallArray[j + 1] = temp;
j++;
}
}
}
return smallArray[0];
}
}
不需要方法getArray()
和findElement()
的新泛型定義。 您已經在類級別定義了T
定義你的方法如下:
public T[] getArray() {
return array;
}
abstract public T findElement() throws IndexingError;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.