请考虑以下代码:
public class Main {
private static Predicate<? extends TestObject> predicate = testObject -> true;
private static Predicate<? extends TestObject> predicate1 = testObject -> true;
public static void main( String[] args ) {
List<TestObject> objects = Lists.newArrayList( new TestObject(), new TestObject() );
objects.stream().filter( predicate.or( predicate1 ) ).findFirst();
}
}
Run Code Online (Sandbox Code Playgroud)
它没有编译,给出错误:
Error:(17, 48) java: incompatible types: java.util.function.Predicate<capture#1 of ? extends test.test.TestObject> cannot be converted to java.util.function.Predicate<? super capture#2 of ? extends test.test.TestObject>
Run Code Online (Sandbox Code Playgroud)
看起来我们不能用"或"或"和"之类的逻辑运算符加入这样的谓词,但为什么Java不能处理它们呢?
它用简单的谓词编译Predicate<TestObject>,但不是用Predicate<? super TestObject>或Predicate<? …