例外クラスをOtherExceptionで拡張し、メッセージフィールドに投げるクラスとメソッドの名前を書きたい。メッセージを設定するために親コンストラクタを使用する以外の方法はありませんが、superの引数にgetStackTraceなどのメソッドを使用することはできません。回避策はありますか?それとも、なぜこれができないのか誰かが知っていますか?Java:例外メッセージのStackTrace情報を書き込む
public OtherException(final String message) {
super(message + getStackTrace()[0].getClassName()+" "+getStackTrace()[0].getMethodName());
}
が、それはJavaで動作しません。
これは私が持っているしたい機能です。
これは動作します:
public OtherException(final String message) {
super(message + " class: " + Thread.currentThread().getStackTrace()[2].getClassName() + ", method: "
+ Thread.currentThread().getStackTrace()[2].getMethodName());
}
たぶん誰かがよりエレガントな何かを知っていますか?
この時点でスタックトレースにデータが入力されていますか? – biziclop
getStackTrace()はスーパータイプのメソッドで、super()が呼び出されるまで使用できません。 –
申し訳ありませんが、スーパーの議論にメッセージを書くのを忘れました。より柔軟にするためには、それを置くのが最善だと思います。ところで、あなたのコードをコンパイルすることはできません: "明示的にコンストラクタを呼び出している間にインスタンスメソッドを参照することはできません"。 –