Как определить интерфейс с бросками универсального типа исключения
Я хочу определить интерфейс, например
public interface Visitor <ArgType, ResultType, selfDefinedException>{
public ResultType visitProgram(Program prog, ArgType arg) throws selfDefinedException;
//...
}
Во время реализации selfDefinedException изменяется. (selfDefinedException как универсальный неопределенный на данный момент) Есть ли способ сделать это?
Спасибо
4 ответа:
Вам просто нужно ограничить тип исключения, чтобы он был подходящим для выброса. Например:
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; }
Ваш обобщенный параметр должен быть расширен Throwable. Что-то вроде этого:
public class Weird<K, V, E extends Throwable> { public void someMethod(K k, V v) throws E { return; } }
Вы можете сделать что-то вроде
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
или похожие.