どのように私は、戻り値の型などの2つのオブジェクトの最も専門的なタイプを使用することができますか?

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);

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=201636&siteId=1
おすすめ