所以我试图传递一个函数来对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);
“运算符&不能应用于java.lang.Object,int”
即使在方法声明UnaryOperator<Integer>
中定义了编译器,编译器似乎也无法推断类型。
我想念什么?我瞎了吗?还是在Java中不起作用?
我在Macbook上使用的是intellij CE版本2019.1.2和OpenJDK 11.0.1。
答案 0 :(得分:2)
夹竹桃示例:
ItemTemplate
不起作用,编译器给我:
lambda表达式中的不兼容类型,“期望的对象”,但找到了“整数”
这确实有效:
register.apply(0, (Integer x) -> x & 6);
通过明确地告诉它先执行按位运算,然后返回(我仍然无法解释为什么这样做行得通,但现在不行了)
但是最好的解决方案是使用RealSkeptic在上面的评论中甚至没有意识到的register.apply(0, x -> (x & 6));
接口。
IntUnaryOperator
感谢您的帮助