【问题标题】:How return a generic array of <T extends Comparable<? super T>> in Java?如何返回 <T extends Comparable< 的泛型数组? Java中的超级T>>?
【发布时间】:2019-12-15 23:38:23
【问题描述】:

我试图弄清楚为什么我的 IDE 会提醒我:

Incompatible types: required T[], found T[]

代码在以下sn-p中:

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];
  }
}

【问题讨论】:

    标签: java arrays generics


    【解决方案1】:

    不需要getArray()findElement() 方法中的新泛型定义。您已经在类级别上定义了T。如下定义您的方法:

    public T[] getArray() {
        return array;
    }
    
    abstract public T findElement() throws IndexingError;
    

    【讨论】:

    • 谢谢,问题是另一个类扩展了搜索器泛型,这样做,问题将在另一个扩展它的类中翻译。我更新了问题以更广泛地了解问题。
    • 下个班就没有问题了。同样在继承的类中使用简单的public T findElement(),我们在方法声明中重新定义了T。
    • 在另一个类中,如果我按照您的建议进行更改,此行将被标记为 T[] bigArray = getArray();出现错误不兼容的类型:需要 T[],找到 T[]。
    • 您使用的是什么 IDE?我在 Eclipse 中检查了这个,它既没有显示错误,也没有显示警告。你真的改变了 both 类中的 all 方法吗?
    • 好的再检查一遍,现在的重点是编译器不允许我使用 compareTo 方法。
    猜你喜欢
    • 2012-01-22
    • 2022-12-17
    • 1970-01-01
    • 2023-03-15
    • 2013-08-29
    • 2023-04-02
    • 1970-01-01
    • 2018-10-04
    • 1970-01-01
    相关资源
    最近更新 更多