我遇到这样的编译器失败:
BiConsumer 类型中的方法accept (Integer, Integer) 不适用于参数(Object, Object)。如何强制转换两个整数输入,以便编译器将它们接受为 <Integer, Integer>
?
我在以下代码中遇到失败:
import java.util.function.BiConsumer;
public class ExceptionHandlingExample {
public static void main(String[] args) {
int[] numberArray = { 1, 2, 3, 4 };
int key = 2;
calc(numberArray, key, wrapperForLambda( (a, b) -> System.out.println(a / b) ));
// Type Safety: The expression of Type BiConsumer needs unchecked conversion to conform to unchecked BiConsumer<Integer, Integer>
}
private static void calc(int[] numberArray, int key, BiConsumer<Integer, Integer> consumer) {
for (int i : numberArray) {
consumer.accept(i, key);
}
}
private static BiConsumer wrapperForLambda(BiConsumer<Integer, Integer> consumer) {
// BiConsumer is a raw type. References to generic type BiConsumer<T, U> should be parameterized
return (a, b) -> consumer.accept(a, b) ;
// [Compilier-error] The method accept (Integer, Integer) in the type BiConsumer<Integer, Integer> is not applicable for the arguments (Object, Object)
}
}
我想摆脱编译器错误: BiConsumer 类型中的方法accept(Integer, Integer) 不适用于参数(Object, Object)
提前感谢您的帮助!
最佳答案
不要使用原始类型BiConsumer
。将方法声明为
private static BiConsumer<Integer, Integer>
wrapperForLambda(BiConsumer<Integer, Integer> consumer) {
return (a, b) -> consumer.accept(a, b);
}
当您使用原始 BiConsumer
时,Java 将其用作 lambda 表达式 (a, b) ->consumer.accept(a, b)
的目标类型。其结果是参数 a
和 b
被假定为 Object
类型(原始类型,记住!),这不会'无法与需要 Integer
的 consumer
BiConsumer
一起使用。
如果这应该是一个通用方法,您可以使该方法通用:
private static <T, U> BiConsumer<T, U>
wrapperForLambda(BiConsumer<T, U> consumer) {
return (a, b) -> consumer.accept(a, b);
}
关于java - 转换 Lambda : BiConsumer<Integer, 整数>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56766939/