0

関数を変更せずに無名関数を使用しない場合に例外をスローする必要がある以下のコードがあるとします。

FOO.doSomething(new Transactable(){
 public void run(FOO foo) {
     // How to proxy a exception throw
     // from here, without modifying the class
 }
});

好き:

@Override
public void run() throws MyCustomException{
       FOO.doSomething(new Transactable(){
           public void run(FOO foo) {
               // How to proxy a exception throw
               // from here, without modifying the class
           }
        });             
}
4

1 に答える 1

2

私はこれを正しく理解したことに疑問を持っていますが、これが私のショットです。どういうわけか、匿名クラスから例外を移動して、親メソッドから例外をスローしようとしていると思います。

class ExceptionWrapper {
    public Exception exception;
}

@Override
public void run() throws MyCustomException{
       final ExceptionWrapper ew = new ExceptionWrapper();

       FOO.doSomething(new Transactable(){
           public void run(FOO foo) {
               try {
                   ...
               } catch(MyCustomException ex) {
                   ew.exception = ex;
               }
           }
        });             

        if(ew.exception != null) throw (MyCustomException)ew.exception;
}
于 2012-07-06T10:28:43.423 に答える