编译器不拆箱 lambda 参数 int

Compiler does not unbox lambda parameter int

所以我试图传递一个函数来对 int[x] 值执行操作。

所以这是我的方法:

public void apply(int index, UnaryOperator<Integer> func) {
    V[index] = func.apply(V[index]);
}

这个有效:

register.apply(0, new UnaryOperator<Integer>() {

                @Override
                public Integer apply(Integer x) {
                    return x & 6;
                }

            });

这有效:

UnaryOperator<Integer> func = x -> x & 6;
register.apply(0, func);

但这给了我一个编译错误:

register.apply(0, x -> x & 6);

"Operator & can not be applied to java.lang.Object, int"

编译器似乎无法推断出类型,即使它是在方法声明中定义的 UnaryOperator<Integer>

我错过了什么?我瞎了吗?还是这在 java 中不起作用?

我在 macbook 上使用的是 intellij CE 版本 2019.1.2 和 OpenJDK 11.0.1。

Oleksandr 示例:

register.apply(0, (Integer x) -> x & 6);

不工作,编译器给我:

incompatible types in lambda expression, Expected Object but found Integer

这确实有效:

register.apply(0, x -> (x & 6));

通过明确告诉它先执行按位运算,然后再执行 return (我仍然无法解释为什么这行得通,但现在行得通了)

但最好的解决方案是使用 IntUnaryOperator 界面,我什至不知道 RealSkeptic 在上面的评论中建议的界面。

public void apply(int index, IntUnaryOperator func) {
    V[index] = func.applyAsInt(V[index]);
}

感谢您的帮助