I'm not trying to create an array of a generic type(例如E[]
)。我要做的是创建一个分析(非原始)数组的predicate,例如
public class ArrayPredicate<A extends Object[]> implements Predicate<A> {
public boolean test(A a) {
if(a == null) return false;
if(a.length == 0) return false;
for(Object o: a) {
if(o == null) return false;
}
return true;
}
...
}
但Predicate<Object[]>
显然是编译错误。
更新:我需要将其扩展到StringArrayPredicate
和IntegerArrayPredicate
,依此类推,以便验证每个元素的具体值。因此,班级本身必须是一体化的。
如何为数组创建一个通用谓词?
答案 0 :(得分:2)
如果您想要Predicate<Object[]>
,则无需将实现类本身设为通用。
编译:
public class ArrayPredicate implements Predicate<Object[]> {
public boolean test(Object[] a) {
if(a == null) return false;
if(a.length == 0) return false;
for(Object o: a) {
if(o == null) return false;
}
return true;
}
}
如果你做想要对你的班级进行参数化:
public class ArrayPredicate<T> implements Predicate<T[]> {
public boolean test(T[] a) {
return a != null && a.length > 0 && !Arrays.stream(a).filter(o -> o == null).findAny().isPresent();
}
}
如果您愿意,请注意方法体的java-8重构。