如何定义抛出一般异常类型的接口?

时间:2012-03-19 22:58:18

标签: java generics exception interface throws

我想定义一个界面,比如

public interface Visitor <ArgType, ResultType, SelfDefinedException> {
     public ResultType visitProgram(Program prog, ArgType arg) throws SelfDefinedException;
     //...
}

在实现过程中,selfDefinedException会有所不同。 (selfDefinedException为现在的通用undefined)   有没有办法做到这一点?

由于

4 个答案:

答案 0 :(得分:10)

您只需要将异常类型约束为适合抛出。例如:

interface Visitor<ArgType, ResultType, ExceptionType extends Throwable> {
    ResultType visitProgram(String prog, ArgType arg) throws ExceptionType;
}

或者也许:

interface Visitor<ArgType, ResultType, ExceptionType extends Exception> {
    ResultType visitProgram(String prog, ArgType arg) throws ExceptionType;
}

答案 1 :(得分:5)

您的通用参数需要扩展Throwable。像这样:

public class Weird<K, V, E extends Throwable> {

   public void someMethod(K k, V v) throws E {
      return;
   }
}

答案 2 :(得分:1)

您可以执行类似

的操作
public interface Test<T extends Throwable> {
    void test() throws T;
}

然后,例如

public class TestClass implements Test<RuntimeException> {
    @Override
    public void test() throws RuntimeException {
    }
}

当然,当你实例化类时,你必须声明抛出的异常。

编辑:当然,将Throwable替换为任何可以扩展ThrowableException或类似内容的自定义异常。

答案 3 :(得分:-3)

如果我理解了这个问题,你可以抛出

Exception

因为它是父类。