gpt4 book ai didi

java - 在 Java 中使用 lambda 作为类的方法

转载 作者:行者123 更新时间:2023-12-04 05:02:59 25 4
gpt4 key购买 nike

正如标题所说,我正在寻找使用 lambdas 实现类的一些非常短的方法,这是闻所未闻的。

Python 可以做到,C# 可以做到,在某种程度上我相信现在甚至 C++ 也可以做到。

但我试图对 Java 类做同样的事情,但没有成功,我查找了任何可能回答这个特定问题的东西,但没有运气。我宁愿不将我的应用程序与 100 个功能接口(interface)聚集在一起,只是为了能够将 lambda 用于更琐碎的功能或方法,因为这会破坏编写更少代码的目的。

这是我尝试过的方法(显然,它们都不起作用,第二个接近了,因为它至少认识到了一个 lambda 在那里的事实:

import static java.lang.Math.*;

class Main {

static double log = (double val, double base) -> Math.log(val) / Math.log(base); // First try. Python way.

static double log = (val, base) -> Math.log(val) / Math.log(base); // Second try. Also inspired from the
// Python way, somewhat similarly to the
// F# or haskell way.

static double log(double val, double base) -> Math.log(val) / Math.log(base); // Third try. The C# way.

public static void main(String[] argv){

System.out.println(log(8,2));

}
}

最佳答案

左侧的类型看起来正确吗?

static double log = (double val, double base) -> Math.log(val) / Math.log(base);

右边的类型是double吗?它不是。它看起来像一个函数。所以左边的类型也应该是一个函数。

你不必声明很多接口(interface),因为其中很多已经存在于图书馆中。

我同意,DoubleBinaryOperator 并没有完全脱口而出,但这正是您要找的:

DoubleBinaryOperator log = (val, base) -> Math.log(val) / Math.log(base);

一个不太理想但更容易记住的替代方案可能是 BiFunction:

BiFunction<Double, Double, Double> log = (val, base) -> Math.log(val) / Math.log(base);

也就是说,BiFunction 是一个接受 2 个 double 参数并返回一个 double 的函数。这是不太理想的,因为它需要自动装箱参数和返回值。

要实际调用这些函数,您不能简单地编写 log(...),您需要接口(interface)中指定的适当方法名称。方法名称应该在任何 IDE 中都很容易找到,因为功能接口(interface)的好处是只有一种方法(在通用标准方法之上)。

有一堆常用的函数式接口(interface)你需要记住,然后它变得容易多了。FunctionConsumerSupplier、以及那些专门用于原始类型的,IntBinaryOperatorIntUnaryOperator 等。

关于java - 在 Java 中使用 lambda 作为类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47485856/

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