【发布时间】:2014-03-07 21:17:04
【问题描述】:
我知道这个话题已经讨论了一段时间了(例如,Java generics warnings on java.util.Collections、java generics, unchecked warnings 等),但我正面临着我无法找到解释的情况。
我有一个 Predicate 类定义为
public interface Predicate<T> {
boolean holds(T o) ;
}
然后,我有一个实用程序类 (PredicateUtils) 来组合谓词。其中的一个示例方法是
public static <T> Predicate join(final Predicate<T> p1, final Predicate<T> p2) {
return new Predicate<T>() {
@Override
public boolean holds(T o) {
return (p1.holds(o) && p2.holds(o)) ;
}
} ;
}
但是,当我调用 join 方法时,例如,传递两个 Predicate 实例,我从 jdk (javac 1.7.0_51) 编译器收到以下错误:
warning: [unchecked] unchecked conversion
return PredicateUtils.join(p1, p2)
required: Predicate<Integer>
found: Predicate
为了简化讨论,可以在给定的类中定义下面的方法(虚拟代码):
public static Predicate<Integer> test() {
Predicate<Integer> p1 = new Predicate<Integer>() {
public boolean holds(Integer o) { return true ; }
};
Predicate<Integer> p2 = new Predicate<Integer>() {
public boolean holds(Integer o) { return true ; }
};
return join(p1, p2) ;
}
并且会看到在编译相关类时,javac 会发出相同的警告。
【问题讨论】: