繁体   English   中英

如何在lambda中使用泛型函数接口方法类型参数

[英]How to use generic function interface method type parameters in a lambda

我试图创建一个通用的lambda,所以我不需要为个别类型重新定义它。 为此,我需要访问传递给函数的类型参数。 不幸的是,我没有找到任何关于如何做到这一点的文档。

这是我想要做的一个例子,但在lambda的前面不会编译:

import java.util.ArrayList;

public class Test {

    interface SolveFunction {
        <In, Out> Out apply(In in);
    }

    public static void main(String...args) {
        SolveFunction f = <In, Out> (In a)  -> {
            ArrayList<Out> list = new ArrayList<>();
            return list;
        };
        System.out.println(f.<String, Integer>apply("Hi").size());
    }
}

首先,将类型参数添加到接口本身:

interface SolveFunction<In, Out> {
    Out apply(In in);
}

你可以实现一个方法:

public static <In, Out> List<Out> makeList(In in) {
    return new ArrayList<Out>();
}

然后您可以将其用作lambda的实现:

SolveFunction<String, Integer> f = Test::makeList;

System.out.println(f.apply("Hi").size());

我不确定您尝试使用ArrayList的是什么,但您还需要将类型声明添加到接口。 以下示例将编译:

public class Test {

    interface SolveFunction<In, Out> {
        Out apply(In in);
    }

    public static void main(String... args) {
        SolveFunction<String, Integer> f = new SolveFunction<String, Integer>() {

            @Override
            public Integer apply(String in) {
                return in.length();
            }
        };

        System.out.println(f.apply("Hi")); // Prints 2
        System.out.println(f.apply("HELLO")); // Prints 5
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM