这看起来很基本,但我不明白为什么我的代码不能编译。
我有一个类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());
我不明白为什么
您的代码无法编译的原因是您定义了startsA()
方法来返回扩展Person的通配符类型的谓语。通配符类型表示Person的未知子类型,
更改startsA()
方法以返回谓词
public Predicate<Person> startsA() {
return p -> p.getName().startsWith("A");
}