gpt4 book ai didi

java - 如果 Java 程序员想要传递一个函数,他们在 Java 8 之前做了什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:24:28 25 4
gpt4 key购买 nike

请对我温柔一点

我听说 Java 8 引入了 lambda。但在此之前,如果你想传递一个函数,比如说,作为一个参数,你做了什么?

我能想到的一种方法是像这样创建一个单一的方法接口(interface):

public interface ISingleMethodInterface
{
bool Really(int n);
}

public bool GimmeFunction(ISingleMethodInterface interface, int n)
{
return interface.Really(n);
}

但这是作为一等公民的功能的非常有限的应用,因为:

  1. 除了执行该函数或将该对象传递给另一个方法之外,您无能为力。使用 lambda,您可以进行组合。例如你可以像这样否定 lambda:

    public bool GimmeLambdaAndIWillComputeItsInverse(Func<int, bool> predicate, int n)
    {
    return !predicate(n);
    }
  2. 您不能返回 lambda 或其派生表达式。我的意思是,您只能像这样返回同一个对象:

    // I know Java doesn't have Tuples but let's forget that for now
    public Tuple GimmeFunction(ISingleMethodInterface interface, int n)
    {
    return new Tuple { Item1 = interface, Item2 = n };
    }

    使用 lambda,您可以像这样返回导数:

    public Func<int, bool> GetInverseFunction(Func<int, bool> predicate, int n)
    {
    return n => !predicate(n);
    }

那么,如果您需要做这样的事情,您会怎么做?

最佳答案

一个简单地传递功能接口(interface)的实例。你对 lambda 的贬低有点不对,因为在 Java 中,lambda 是字面意义上的函数式接口(interface)。因此,由于一个是根据另一个实现的,因此它们并不比另一个强。不同之处在于源代码的可读性如何打动您。

关于java - 如果 Java 程序员想要传递一个函数,他们在 Java 8 之前做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38416701/

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