2012-03-02 68 views
3

我应该实现没有递归的mergesort。我已经完成了所有的爵士乐课程,但是班级并不是因为家庭作业领域之外的原因而编译的。这里的问题是:未经检查的从泛型T转换为可比较的预防编译

这方面采取直接形成的课本......

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: 警告:未经检查]未经检查的铸件

发现:java.lang.Comparable的[]需要:T []

+4

这只是一个警告。该代码仍应编译。 – jjnguy 2012-03-02 04:43:00

+1

这应该编译。你也可以使用@SuppressWarnings(“unchecked”)注解。 – 2012-03-02 04:51:31

回答

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而不是那种代码。