【问题标题】:Unchecked cast from generic T to comparable preventing compile未经检查的从泛型 T 转换为可比较的阻止编译
【发布时间】:2012-03-02 04:36:35
【问题描述】:

我应该在没有递归的情况下实现归并排序。我已经完成了所有爵士乐,但是由于家庭作业范围之外的原因,课程没有编译。问题来了:

这方面直接取自教科书……

 public <T extends Comparable<? super T>> void Mergesort(T[] a){
  T[] tmpArray =(T[]) new Comparable[a.length];

发现 1 个警告:

文件:/Users/OcastaEshu/Java/NonRecursiveMergesort.java [行:22]

警告:/Users/OcastaEshu/Java/NonRecursiveMergesort.java:22: 警告:[unchecked] 未经检查的演员表

找到:java.lang.Comparable[] 需要:T[]

【问题讨论】:

  • 这只是一个警告。该代码仍应编译。
  • 这应该可以编译。您也可以使用 @SuppressWarnings("unchecked") 注释。

标签: java generics mergesort comparable


【解决方案1】:

如果你想避免警告,你可以这样做:

public static <T extends Comparable<? super T>> void Mergesort(T[] a, Class<T[]> clazz) { 
    T[] tmpArray = clazz.cast(Array.newInstance(a.getClass().getComponentType(), a.length));
}

其中 classOfelement 是 a.getClass()。我同意,这很丑陋,您最好使用 @SuppressWarnings 而不是那种代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-13
    • 1970-01-01
    相关资源
    最近更新 更多