在Java中,lambda是否可以接受多种不同的类型?

即:

    Function <Integer, Integer> adder = i -> i + 1;
    System.out.println (adder.apply (10));

Varargs还可以工作:

    Function <Integer [], Integer> multiAdder = ints -> {
        int sum = 0;
        for (Integer i : ints) {
            sum += i;
        }
        return sum;
    };

    //.... 
    System.out.println ((multiAdder.apply (new Integer [] { 1, 2, 3, 4 })));

但我想要的东西可以接受许多不同类型的论点,例如:

    Function <String, Integer, Double, Person, String> myLambda = a , b, c, d->  {
    [DO STUFF]
    return "done stuff"
    };

主要用途是为了方便起见,在函数内部有小的内联函数.

我环顾了谷歌,查看了Java的功能包,但没有找到.这可能吗?

推荐答案

如果用多个类型参数定义这样一个功能接口,这是可能的.没有这样的内置类型.(有几个具有多个参数的有限类型.)

@FunctionalInterface
interface Function6<One, Two, Three, Four, Five, Six> {
    public Six apply(One one, Two two, Three three, Four four, Five five);
}

public static void main(String[] args) throws Exception {
    Function6<String, Integer, Double, Void, List<Float>, Character> func = (a, b, c, d, e) -> 'z';
}

我在这里叫它Function6.名称由您自行决定,只要尽量不要与Java库中的现有名称冲突即可.


如果您所询问的就是类型参数,那么也没有办法定义数量可变的类型参数.


有些语言,比如Scala,使用1、2、3、4、5、6等类型参数定义了许多内置类型.

Java相关问答推荐

内容处置 destruct 了PSP请求

Java Swing绘制gif作为多个JSYS和JLabels的背景

长音符

无法从TemporalAccessor获取Instant:{},ISO解析为2024-04- 25 T14:32:42类型为java.time. form.Parsed

Java 22模式匹配不适用于记录模式匹配.给出汇编问题

gitlab ci不会运行我的脚本,因为它需要数据库连接'

Java:根据4象限中添加的行数均匀分布行的公式

将成为一个比较者.比较…在现代Java中,编译器会对`CompareTo`方法进行优化吗?

如何判断一个矩阵是否为有框矩阵?

如何使用Maven和Spring Boot将构建时初始化、跟踪类初始化正确传递到本机编译

Arrays.hashcode(int[])为不同的元素提供相同的散列

SonarLint:只能有条件地调用方法(S)

Instancio未在日志(log)中显示测试失败消息

垃圾收集时间长,会丢弃网络连接,但不会在Kubernetes中反弹Pod

当构造函数创建一个新实例时,Java为什么需要&new";

Cordova Android Gradle内部版本组件不兼容

Spring动态反序列化JSON可以是列表,也可以只是一个对象

在java中使用不同的application.properties-jar而不使用Spring

处理4.3问题:javax.xml.ind包不存在(&Q;).您可能在学习GitHub教程时遗漏了库.&Q

基于距离的APACHE POI公式判断