泛型和Java警告
我知道这个话题已经安静地讨论了一段时间(例如,、等等),但我面临着一种无法解释的情况 我有一个谓词类定义为泛型和Java警告,java,generics,Java,Generics,我知道这个话题已经安静地讨论了一段时间(例如,、等等),但我面临着一种无法解释的情况 我有一个谓词类定义为 public interface Predicate<T> { boolean holds(T o) ; } 公共接口谓词{ 布尔保持(to); } 然后,我有一个实用类(PredicateUtils)来组成谓词。其中的一个示例方法是 public static <T> Predicate join(final Predicate<T> p
public interface Predicate<T> {
boolean holds(T o) ;
}
公共接口谓词{
布尔保持(to);
}
然后,我有一个实用类(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)) ;
}
} ;
}
公共静态谓词联接(最终谓词p1,最终谓词p2){
返回新谓词(){
@凌驾
公共布尔保持(TO){
回报(p1.持有(o)和p2.持有(o));
}
} ;
}
然而,当我调用一个连接方法时,例如,传递两个谓词实例,我从jdk(JavaC1.7.051)编译器中得到以下错误:
warning: [unchecked] unchecked conversion
return PredicateUtils.join(p1, p2)
required: Predicate<Integer>
found: Predicate
警告:[未选中]未选中的转换
返回谓词EUTILS.join(p1,p2)
必需:谓词
发现:谓词
为了简化讨论,once可以在给定类中定义以下方法(伪代码):
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) ;
}
公共静态谓词测试(){
谓词p1=新谓词(){
公共布尔保持(整数o){return true;}
};
谓词p2=新谓词(){
公共布尔保持(整数o){return true;}
};
返回连接(p1,p2);
}
编译相关类时,javac会发出相同的警告。正如编译器试图告诉您的,您的方法返回的是
谓词
,而不是谓词
不要那样做
如果创建泛型类,则应始终将其与泛型参数一起使用。请注意
join
方法的返回类型:
public static <T> Predicate join(final Predicate<T> p1, final Predicate<T> p2)
公共静态谓词联接(最终谓词p1,最终谓词p2)
您使用的是原始类型,因此发出了警告。将其更改为:
public static <T> Predicate<T> join(final Predicate<T> p1, final Predicate<T> p2)
公共静态谓词联接(最终谓词p1,最终谓词p2)
的确如此。我错过了:)谢谢。当然,这不是我的本意,而是一个失误。谢谢