2012-03-02 70 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而不是那種代碼。