Как определить интерфейс, генерирующий общий тип исключения? - PullRequest
4 голосов
/ 20 марта 2012

Я хочу определить интерфейс, например

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

во время реализации, selfDefinedException варьируется.(selfDefinedException как универсальный неопределенный на данный момент) Есть ли способ сделать это?

Спасибо

Ответы [ 4 ]

10 голосов
/ 20 марта 2012

Вам просто нужно ограничить тип исключения, чтобы его можно было выбросить.Например:

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;
}
5 голосов
/ 20 марта 2012

Ваш обобщенный параметр должен был бы расширить Throwable.Как то так:

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

   public void someMethod(K k, V v) throws E {
      return;
   }
}
1 голос
/ 20 марта 2012

Вы можете сделать что-то вроде

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

А потом, например

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

Конечно, когда вы создаете экземпляр класса, вы должны объявить выброшенное исключение.

РЕДАКТИРОВАТЬ: Конечно, замените Throwable любым из ваших определенных вами исключений, которые будут расширяться Throwable, Exception или аналогичными.

0 голосов
/ 20 марта 2012

Если я понял вопрос, можете выкинуть

Exception

как родительский класс.

...