这是Predicate功能界面的代码:
@FunctionalInterface
public interface Predicate<T> {
boolean test(T t);
default Predicate<T> and(Predicate<? super T> other) {
Objects.requireNonNull(other);
return (t) -> test(t) && other.test(t);
}
static <T> Predicate<T> isEqual(Object targetRef) {
return (null == targetRef)
? Objects::isNull
: object -> targetRef.equals(object);
}
}
为什么and
默认方法在方法签名中返回类型之前不使用类型参数<T>
?
我认为default <T> Predicate<T> and(Predicate<? super T> other)
是正确的,因为它使用了返回类型Predicate<T>
。
答案 0 :(得分:0)
Obicere已经提到过了。
and
返回并接受与this
具有相同泛型类型的谓词。
Predicate<String> isNotNull = s -> s != null;
Predicate<String> andNotEmpty = isNotNull.and(s -> s.length() > 0);
虽然isEqual
是static
,但它不会“继承”其类声明的泛型类型并定义自己的<T>
。它更像是一个工厂方法,用于创建与修复对象相比的谓词。
Predicate<String> isEqualToSth = Predicate.isEqual("sth");