gpt4 book ai didi

java - 转换 Lambda : BiConsumer

转载 作者:行者123 更新时间:2023-12-01 17:44:50 25 4
gpt4 key购买 nike

我遇到这样的编译器失败: 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) 的目标类型。其结果是参数 ab 被假定为 Object 类型(原始类型,记住!),这不会'无法与需要 Integerconsumer 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com