簡體   English   中英

如何返回一個通用數組<T extends Comparable<? super T> &gt; 在 Java 中?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM