可调用

时间:2017-09-28 18:01:09

标签: java

有没有办法获得一个显式抛出(非运行时)异常的类,而只抛出正文抛出的(非运行时)异常?

我知道如何使用固定数量的例外执行此操作,例如:

public interface Throw1Callable<T, E extends Exception> {
    public T call() throws E;
}

这样,当调用call时,你不必处理Exception,而只需要处理RuntimeExceptions和E.但这根本不会扩展。如果我想为两个例外做这个,我需要为Throw2Callable等创建一个新类。而Java(可能还有所有语言)并不提供可变数量的泛型或任何可能的类型帮助

有没有一种很好的方法来封装上面的内容?

编辑澄清:让我们说A.a抛出IOException。我希望能够((Throw1Callable)() -> A.a()).call()并且只捕获IOException而不是捕获异常。 ((Callable)() -> A.a()).call()将抛出Exception而不仅仅是IOException。

1 个答案:

答案 0 :(得分:1)

这归结为某种“vararg”类型参数,这在Java中是不可能的。

所以ThrowXCallable可能是你在这里做的最好的。我认为“可扩展性”在这里不是一个大问题,你可能不需要超过Throw5Callable

Java本身采用这种方法 - 请参阅BiFunction