如何避免在java 8中使用接口?

时间:2014-07-11 17:58:38

标签: java lambda java-8

我只是想知道是否可以避免在此代码中使用接口

public interface FunctionT<T,R>  {
        R apply(Integer...args);
}
public static FunctionT sum = (params) ->  Arrays.asList(params)
                                                                .stream()
                                                                .reduce(Integer::sum).get();

1 个答案:

答案 0 :(得分:3)

Java中lambda表达式的类型是功能接口。这意味着必须为lambda提供作为功能接口的目标类型。这可以是您的(FunctionT)或标准的java.util.function.Function

换句话说,Java中的函数类型是名义,而不是结构。

(另外,您不想在get()上盲目致电Optional,您想使用其中一种安全方法,例如orElse()ifPresent()否则你首先会失去使用Optional的所有安全性。)