コメント/質問が埋め込まれたサンプル クラスを次に示します。この状況に対処する最善の方法を教えてください。
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% 確実ではありません。