我正在尝试创建一个可以抛出自定义异常的功能界面,我想出的是。
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一起使用?
谢谢!
答案 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
函数。