2013-02-18 62 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

相关问题