我不确定这里发生了什么,但是Java编译器似乎无法推断出我使用的这个lambda的类型(并且IntelliJ给了我一个"循环推理"警告)。它所抱怨的lambda是具有以下签名的函数的第一个参数:
public <T> T apply(Function<byte[], T> ifPrimitive, Function<List<TreeNode>, T> ifConstructed)
这是我如何使用它的一个例子:
value.apply((p) -> { return null; },
(c) -> {
// Process the object a bit and return some data
}
);
以及编译错误:
error: method apply in class TreeValue cannot be applied to given types;
value.apply((p) -> { return null; },
^
required: Function<byte[],T>,Function<List<TreeObject>,T>
found: (p)->{ ret[...]ll; },(c)->{ for[...]} } }
reason: cannot infer type-variable(s) T
(argument mismatch; bad return type in lambda expression missing return value)
where T is a type-variable:
T extends Object declared in method <T>apply(Function<byte[],T>,Function<List<TreeObject>,T>)
1 error
:compileJava FAILED
对于某些上下文,我尝试实现一个树,其中每个节点都是一个内部节点,包含更多节点或包含要处理的原始数据。我试图通过一种Either monad的实现来实现它,其中left选项是包含leaf的二进制数据的byte [],而右选项是子节点的列表。
我理解更为标准的方法可能是多态树,但由于这棵树将被其他类消费的方式,我觉得这不适用于此。
关于这里发生了什么的任何想法?