2012-03-19 66 views
2

我想定義一個接口,像如何定義一個接口拋出一個通用的異常類型

public interface Visitor <ArgType, ResultType, selfDefinedException>{ 
    public ResultType visitProgram(Program prog, ArgType arg) throws selfDefinedException; 
    //... 
} 
實施過程中

,selfDefinedException變化。 (selfDefinedException作爲現在通用的undefined) 有沒有辦法做到這一點?

感謝

+1

你可以定義你的接口來拋出一個異常,它是所有selfDefinedException的超類。 – 2012-03-19 23:00:49

回答

6

你只需要限制異常類型適合被拋出。例如:

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; 
} 
+0

但是你想要使用傳統的命名約定,對吧? – 2012-03-19 23:19:50

+1

@ TomHawtin-tackline:是的,儘管Java中用於命名類型參數的約定並不像.NET中那樣清晰。 – 2012-03-20 06:45:15

-4

如果我理解這個問題,你可以扔掉

Exception 

,因爲它是父類。

5

您的泛型參數需要擴展Throwable。這樣的事情:

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

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

'E'不能是一組異常類型,這是一種恥辱。 – 2012-03-19 23:19:28

+0

確實,這將是一個可變類型參數,它似乎仍然不被支持。 – 2015-08-10 17:05:18

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或相似。

相關問題