簡體   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