合理的な
いくつかのスーパークラスでより詳細なロギング デバッグ/ロギング出力が必要なため、サブクラス名は実際にはリアルタイム パフォーマンスやアプリケーション ロジックに影響しません。また、これを通常どおり行うのはかなり悪い設計であるという意見もありますが、開発の実行中にこの情報をログに記録することを本当に望んでいます。
質問
以下のような単純なクラス構造があるとします。参照を明示的に渡すことなく、サブクラスの名前をスーパークラスにプルするにはどうすればよいでしょうか?
public abstract AbstractClass {
private Logger logger = LoggerFactory.getLogger(getClass());
public AbstractClass() {}
public void execute(ContextObject context) {
if (logger.debuggingEnabled()) {
String invokingClassName = ""; // <-- how do I get this?
logger.debug("Executing {}", invokingClassName);
}
// shared application logic is here...
}
}
public MyClass extends AbstractClass {
public MyClass() {}
@Override
public void execute(ContextObject context) {
super.execute(context);
// application logic...
}
}
私は以前にスタック トレースの解析を行ったことがありますが、この情報が必要な場合は、この方法を使用する必要があると思います。私のためにこれを行うライブラリまたは適切なコードスニペットを知っている人はいますか?