beatbrot:
私は基本的にしたいことは、より専門型は、次の例のように推察されていることを、次のとおりです。
Predicate<Object> first;
Predicate<String> second;
Predicate<String> firstOr = first.or(second);
Predicate<String> secondOr = second.or(first);
メソッドシグネチャどうだろうor(...)
ように見えるが、これを達成するには?
ミーシャ:
これは、次の宣言で達成することができますPredicate<T>::or
。
default <R extends T> Predicate<R> or(Predicate<? super R> other) {
return r -> this.test(r) || other.test(r);
}
これができるようになるor
作成するために、Predicate
両方の任意のサブタイプのためPredicate
の型。したがって、たとえば、次のように動作します:
Predicate<Object> first;
Predicate<Number> second;
Predicate<Integer> firstOr = first.or(second);
Predicate<Integer> secondOr = second.or(first);