[英]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.