小编sta*_*032的帖子

Java 8谓词 - 为什么不能加入通配符泛型谓词?

请考虑以下代码:

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<? …

java generics java-8

7
推荐指数
1
解决办法
636
查看次数

标签 统计

generics ×1

java ×1

java-8 ×1