@FunctionalInterface也实现了,然后呢?

时间:2018-03-04 20:24:06

标签: java function generics functional-interface

我正在尝试创建一个可以抛出自定义异常的功能界面,我想出的是。

public class MyException extends Exception {
    public MyException(String message) {
        super(message);
    }
}

@FunctionalInterface
public interface ThrowingFunction<T, R> {
  R apply(T t) throws MyException;
}

这适用于使用apply函数,但问题是我还想使用Java函数的andThen功能。当我尝试做类似的事情时。

ThrowingFunction<Integer, Integer> times2WithException = (num) -> {
    if(num == null) {
       throw new MyException("Cannot multiply null by 2");
    }
    return num * 2;
};
times2WithException.andThen(times2WithException).apply(4);

我收到错误

Cannot find symbol: method andThen(ThrowingFunction<Integer, Integer>)

我应该使用什么而不是FunctionalInterface?或者是否需要实现另一个功能才能使其与AndThen一起使用?

谢谢!

2 个答案:

答案 0 :(得分:3)

仅允许功能接口指定一个未实现的功能。但是您可以指定已经具有如下实现的andThen函数:

default

答案 1 :(得分:2)

您期望npm install npm@next -g方法来自哪里?你还没有在任何地方定义它!

andThen

在这里,您可以利用接口中的@FunctionalInterface interface ThrowingFunction<T, R> { R apply(T t) throws MyException; default <V> ThrowingFunction<T, V> andThen(ThrowingFunction<R, V> after) { return (T t) -> after.apply(apply(t)); } } 方法创建default函数。