【发布时间】:2020-08-03 11:01:02
【问题描述】:
Eclipse 告诉我:
interface Recursive
{
List<? extends Recursive> getSubitems();
default void processRecursive(Consumer<? extends Recursive> f)
{
f.accept(this);
for (Recursive r : getSubitems())
f.accept(r);
}
}
不可能(f.accept(this) 和 f.accept(r) 的错误:Consumer 类型中的方法 accept(capture#1-of ? extends Recursive) 不适用于参数(递归))
我想知道为什么,因为这将扩展 Recursive,所以 r(递归)也会扩展,并且它们可以作为 Recursives 处理..
在我看来,这将是完全合理且可预测的行为。
【问题讨论】:
-
我可以,但是,如果我们说一个叶子对象扩展递归,其中包含一个叶子对象列表,我们将不得不将它们存储为 Recusive 列表并每次将它们转换为例如访问它的值使得使用它变得更加痛苦。因此,递归子类型的列表将更有用,据我所知,应该可以工作
标签: java recursion inheritance lambda extends