4

コメント/質問が埋め込まれたサンプル クラスを次に示します。この状況に対処する最善の方法を教えてください。

public abstract class AbstractThreadWithException<TException extends Exception>
extends Thread {

    private TException _exception;

    public TException getException() {
        return _exception;
    }

    // I don't like this annotation: SuppressWarnings.  Is there a work-around?
    // I noticed Google Guava code works very hard to avoid these annos.
    @SuppressWarnings("unchecked")
    @Override
    public void run() {
        try {
            runWithException();
        }
        // By Java rules (at least what my compiler says):
        // I cannot catch type TException here.
        catch (Exception e) {
            // This cast requires the SuppressWarnings annotation above.
            _exception = (TException) e;
        }
    }

    public abstract void runWithException()
    throws TException;
}

への参照を渡すことは可能だと思いますがClass<? extends Exception>、それは醜いようです。もっと優雅な解決策はありますか?

残念ながら、私の脳は Java の考え方よりも C++ の考え方に固執しているため、テンプレートとジェネリックをめぐる混乱が生じています。この問題は型の消去に関連していると思いますが、100% 確実ではありません。

4

1 に答える 1