提问者:小点点

Java:泛型和lambda表达式


这看起来很基本,但我不明白为什么我的代码不能编译。

我有一个类Person,具有String name属性和getName()getter。

我创建了一个员工类扩展Person

我有这个方法:

public Predicate<? extends Person> startsA() {
        return p -> p.getName().startsWith("A");
}

所以我希望这个方法可以与Person的所有子类一起使用

但是这段代码不能编译:

startsA().test(new Employee());
startsA().test(new Person());

我不明白为什么


共1个答案

匿名用户

您的代码无法编译的原因是您定义了startsA()方法来返回扩展Person的通配符类型的谓语。通配符类型表示Person的未知子类型,

更改startsA()方法以返回谓词

public Predicate<Person> startsA() {
    return p -> p.getName().startsWith("A");
}