2012-03-19 7 views
2

をスローし、実装時の私はインターフェイスを定義したい汎用的な例外タイプ

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

のように、selfDefinedExceptionが変化します。 (今のところ未定義のgenericとしてのselfDefinedException) これを行う方法はありますか?

おかげ

+1

すべてのselfDefinedExceptionsのスーパークラスである例外をスローするようにインターフェイスを定義することができます。 –

答えて

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

しかし、従来の命名規則を使用したいと思うでしょうか? –

+1

@ TomHawtin-tackline:はい、Javaでの型パラメータの命名規則は、.NETと同じくらい明確ではありませんが... –

-4

私は質問を理解していれば、それは親クラスであるとして、あなたは

Exception 

を投げることができます。

5

汎用化されたパラメータはThrowableを拡張する必要があります。このようなもの:

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

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

「E」は例外タイプのセットにはなり得ないということは残念です。 –

+0

実際、それはまだサポートされていないようなバリデーション型のパラメータになります。 –

1

あなたは、たとえば

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

のために、そして

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

など何かを行うことができますあなたが宣言しなければならないクラス彼は例外がスローされます。

EDIT:もちろん、ThrowableExceptionまたは類似を拡張しますあなたの自己定義された例外のいずれかとThrowableを交換してください。

関連する問題