Java 如何在这个通用方法中避免SuppressWarnings(“未选中”)?

Java 如何在这个通用方法中避免SuppressWarnings(“未选中”)?,java,generics,Java,Generics,我如何在这个方法中去掉@SuppressWarningUnchecked @SuppressWarnings("unchecked") public <T> Worker<T> findSimilarWorker(Worker<T> worker) { // The variable workers is a Set<Worker<?>> for(Worker<?> w : workers) {

我如何在这个方法中去掉@SuppressWarningUnchecked

@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;
}
只要定义了worker以生成类型为?的worker,您就只需要类型转换。编译器警告您这一点是正确的,因为Worker可能包含不同类型的Worker,虽然没有显示Worker,但我假设它不是T类型

简短版本:您不能,即使使用instanceof check也不行,因为instanceof check不允许泛型

只要定义worker以生成类型为?的worker,您就只需要类型强制转换。编译器警告您这一点是正确的,因为Worker可能包含不同类型的Worker,虽然没有显示Worker,但我假设它不是T类型


短版本:你不能,即使有instanceof check也不行,因为instanceof check不允许泛型

如果你真的想摆脱它,那么你应该改变你的java版本。你试过了吗Worker@pKs我在安卓上,所以我被Java困住了6@nicopico这不会编译,因为workers是一个集合如果你真的想摆脱它,那么你应该改变你的java版本Worker@pKs我在安卓系统上,所以我坚持使用Java6@nicopico无法编译,因为workers是一个集合如果Worker有一个方法GetTypeSoft返回类。。。这有什么帮助吗?我怀疑一个类会有帮助,但如果worker有一个本质上会将自己强制转换为worker的方法,那么这可能会起作用:public worker getOfTypeT{return worker this;}请注意,这样的泛型强制转换可能会在运行时在赋值行而不是强制转换上得到ClassCastException;胡说八道,没关系,上面的方法会给你一个确切的警告:如果工人有一个方法GetTypeSoft返回类。。。这有什么帮助吗?我怀疑一个类会有帮助,但如果worker有一个本质上会将自己强制转换为worker的方法,那么这可能会起作用:public worker getOfTypeT{return worker this;}请注意,这样的泛型强制转换可能会在运行时在赋值行而不是强制转换上得到ClassCastException;胡说八道,没关系,上面的方法会给你一个确切的警告:P