私はすべての私のカスタム例外ParentExceptionの親クラスを持っています。すべての子例外に、例外にメッセージを追加するメソッドが必要です。これを行うために、ジェネリック型のオブジェクトを返すジェネリックメソッドを作成しました。私はthis
を親クラスのメソッドで使用してメッセージを追加してからthis
を返しますが、このメソッドはジェネリック型を返すのでジェネリック型Tにキャストしました。これはうまくいくと思われますが、警告が表示されます。次のように私のコードは次のとおりです。Java:ジェネリックが<T extends Parent>の場合、親クラスのジェネリック型にキャストしていますか?
public class ParentException extends RuntimeException{
private String message;
public ParentException() {
message = "";
}
public void addToMessage(String msg) {
message += msg;
}
public void printMessage() {
System.out.println(message);
}
public <T extends ParentException> T withMessage(String msg) {
this.addToMessage(msg);
return (T) this; // This line gives the warning
}
}
そのラインで与えられた警告はUnchecked cast from ParentException to T
です。このメソッドは期待どおりに動作するように見えるので、私は心配していませんが、なぜこれが最初に警告を出すのかをよりよく理解したいと思います。
このキャストは常に安全ですか?それ以外の場合は、実行時エラーが発生しますか?
'T'が' ParentException'の子であると推測できるため、安全ではありません。その場合、キャストは失敗します( 'ParentException'オブジェクトで呼び出された場合)。 'T'が実際に' ParentException'である場合にのみ動作します。 –
なぜここでジェネリックを使用する必要があるのか分かりません。 –