【发布时间】:2019-06-05 13:29:53
【问题描述】:
所以我试图传递一个函数来对 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。
【问题讨论】:
-
IntUnaryOperator会不会比int[]更好? -
你能发布完整的源代码吗?这两种情况都对我有用...
-
也适用于我,尽管是在 Java 8 上。
-
@chrylis,编译器应该从第二个参数的类型推断
x的类型(如Integer)到register.apply()。完成此操作后,应该毫不犹豫地拆箱x。对我来说,确实如此。 -
无法重现。您可以发布有关您的设置的详细信息吗?哪个java?哪个IDE?也许是一些非标准的编译器?像eclipse编译器一样?可能是一个错误。它应该能够自行推断类型并取消装箱。
标签: java lambda type-inference unboxing