1

在调用参数为... 并根据需要Supplier<O>输入lambda的函数时。我有以下错误适用并阻止 ide (eclipse-oxygen) 构建项目

Internal compiler error: java.lang.UnsupportedOperationException: no glb for [public abstract class java.lang.Number

方法类似

Foo foo1;
Foo foo2;

public < O > O run( Function< Foo, O > func ){
    if( func == null )
        return null;
    return firstNotNull( () -> func.apply( foo1 ),
                         () -> func.apply( foo2 ) );
}

方法:

@SafeVarargs
public static final < O > O firstNotNull( Supplier< O >... funcs ){
    for( Supplier< O > func : funcs ){
        O obj = func.get();
        if( obj != null )
            return obj;
    }
    return null;
}

回到给出的错误,类中没有提到的类号;然而,一个核心 java 类在编译时出现错误。

但是,当将级编辑为

public < O > O run( Function< Foo, O > func ){
    if( func == null )
        return null;
    return firstNotNull( (Supplier< O >) () -> func.apply( foo1 ),
                         (Supplier< O >) () -> func.apply( foo2 ) );
}

error不再发生,IDE 成功构建并遵守。我正在发布这篇文章,因为除了建议从 eclipse 中删除损坏的构建器之外,我在网上找不到类似的帖子,这对这个问题的变体不起作用;因此,我正在记录这有助于其他有类似问题的开发人员。

我还要求找出发生了什么错误以及为什么会发生?

PS8.0_151我注意到这只是在 java 更新到from后才成为问题8.0_144

更新:

我已将 java 版本从 8u151 更改为 8u152 并尝试了 9,但该工作区中仍然存在错误。但是,我在eclipse中创建了一个新项目来重新创建错误,即使我更改了java版本,我也没有成功。结论:eclipse似乎抛出了错误,Java Builder和Spring Project Builder都抛出了同样的错误。

4

0 回答 0