Java Lambda“;循环推理“;

Java Lambda“;循环推理“;,java,lambda,either,Java,Lambda,Either,我不确定这里发生了什么,但是Java编译器似乎无法推断出我正在使用的lambda的类型(IntelliJ给了我一个“循环推断”警告)。它抱怨的lambda是具有以下签名的函数的第一个参数: public T-apply(函数ifPrimitive,函数ifConstructed) 这是我如何使用它的一个例子: value.apply((p) -> { return null; }, (c) -> { // Process the

我不确定这里发生了什么,但是Java编译器似乎无法推断出我正在使用的lambda的类型(IntelliJ给了我一个“循环推断”警告)。它抱怨的lambda是具有以下签名的函数的第一个参数:

public T-apply(函数ifPrimitive,函数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
错误:类TreeValue中的方法apply无法应用于给定类型;
value.apply((p)->{returnnull;},
^
必需:功能,功能
发现:(p)->{ret[…]ll;},(c)->{for[…]}
原因:无法推断类型变量T
(参数不匹配;lambda表达式中的错误返回类型缺少返回值)
其中T是一个类型变量:
T扩展方法apply中声明的对象(函数,函数)
1错误
:compileJava失败
对于某些上下文,我试图实现一个树,其中每个节点要么是一个内部节点,包含更多节点,要么包含用于处理的原始数据包含叶的二进制数据,右选项为子节点列表

我知道更标准的方法可能是多态树,但由于该树将被其他类使用,我觉得这不是最适用的方法


关于这里发生的事情有什么想法吗?

列表之后有一个额外的
。旁注:您可以替换
(p)->{return null;}
使用
p->null
。我假设这是在javac中?很好的捕获,我做了一些小的编辑,从类名中删除了一些潜在的红色鲱鱼,我猜我的编辑失败了。但是这些更改都不会影响我看到的行为,我99.99%确定。在javac和Eclipse中为我编译。之后还有一个额外的
<代码>列表
。旁注:您可以替换
(p)->{returnnull;}
使用
p->null
。我假设这是在javac中?很好,我做了一些小的编辑,从类名中删除了一些潜在的麻烦,我猜我的编辑失败了。但是这些更改都不应该影响我看到的行为,我99.99%确定。在javac和Eclipse中为我编译。