谓词接口中的Java通用方法

时间:2018-05-25 03:28:13

标签: java generics

这是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>

1 个答案:

答案 0 :(得分:0)

Obicere已经提到过了。

and返回并接受与this具有相同泛型类型的谓词。

Predicate<String> isNotNull = s -> s != null;
Predicate<String> andNotEmpty = isNotNull.and(s -> s.length() > 0);

虽然isEqualstatic,但它不会“继承”其类声明的泛型类型并定义自己的<T>。它更像是一个工厂方法,用于创建与修复对象相比的谓词。

Predicate<String> isEqualToSth = Predicate.isEqual("sth");