gpt4 book ai didi

java - 使用 Lambda 和泛型

转载 作者:行者123 更新时间:2023-12-01 22:24:04 25 4
gpt4 key购买 nike

我正在学习 Java 8,我正在尝试一起使用 lambda 和泛型,我编写了这个小示例

import java.util.function.*;

public class LambdaTest<T> {

public T calculate(T x, T y, BiFunction<T, T, T> func) {
return func.apply(x, y);
}

public static void main(String args[]) {
LambdaTest<Integer> l = new LambdaTest<Integer>();
System.out.println("" + l.calculate(10, 10, (x, y) -> x + y));
System.out.println("" + l.calculate(10, 10, (x, y) -> x * y));
System.out.println("" + l.calculate(10, 10, (x, y) -> x / y));
System.out.println("" + l.calculate(10, 10, (x, y) -> x - y));
LambdaTest<Double> l2 = new LambdaTest<Double>();
System.out.println("" + l2.calculate(10.0, 10.0, (x, y) -> x + y));
}
}

我有几个问题

  1. 我的 lambda 被定义了两次 (x, y) -> x + y 。是否可以只定义一次。

  2. 似乎每次运行此代码时,都会将 10 装箱为 Integer,然后运行该代码。我是否可以将其定义为 int而不是Integer 。我尝试做 new LambdaTest<int>但没有成功。

最佳答案

  1. 没有。其中一个类型为BiFunction<Integer, Integer, Integer> ,而另一个的类型为 BiFunction<Double, Double, Double> 。因此它们彼此不兼容。
  2. 为了避免拆箱和装箱,您必须使用 DoubleBinaryOperator 和 IntBinaryOperator,它们使用原始类型。但这样你就需要两个不同的接口(interface)。

关于java - 使用 Lambda 和泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32640621/

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