2013-02-18 78 views
1

如何擺脫@SuppressWarnings(「unchecked」)這個方法?如何避免使用此泛型方法中的SuppressWarnings(「unchecked」)?

@SuppressWarnings("unchecked") 
public <T> Worker<T> findSimilarWorker(Worker<T> worker) { 
    // The variable workers is a Set<Worker<?>> 
    for(Worker<?> w : workers) { 
     // The following line is unchecked cast 
     if(w.isSimilar(worker)) return (Worker<T>) w; 
    } 

    return null; 
} 
+0

如果你真的想擺脫它,那麼你應該改變你的Java版本。 – Prateek 2013-02-18 12:37:15

+0

你試過了嗎?(工人 w:workers){}'? – nicopico 2013-02-18 12:38:08

+0

@pKs我在Android上,所以我堅持使用Java 6 – fhucho 2013-02-18 12:40:26

回答

5

只要workers被定義爲產生Worker小號?型的,你只是要需要類型轉換。編譯器是正確的在此警告你,因爲workers可能包含不同類型的Worker(儘管workers未顯示,我假設它不是T類型)。

(短版:你不能,甚至不能與instanceof檢查,不允許仿製藥)

+0

如果'Worker'有一個方法'getTypeOfT( )'返回'類'......可以有任何幫助嗎? – fhucho 2013-02-19 14:17:46

+0

我懷疑'Class '會有幫助,但是如果工人有一種方法可以實質上將自己投射到'Worker ',那可能會有效:'public Worker getOfTypeT(){return(Worker )this; }(注意,泛型類型的轉換可能會在運行時得到一個'ClassCastException',而不是轉換;) – akaIDIOT 2013-02-19 15:28:51

+0

Ow bollocks,沒關係,上面的方法會給你一個確切的警告,你開始:P – akaIDIOT 2013-02-19 15:42:21

相關問題