1. ホーム
  2. java

[解決済み] スーパークラスの中からサブクラスの名前を取得する

2023-06-03 19:26:38

質問

という名前の基底クラスがあるとします。 Entity . このクラスには、クラス名を取得するための静的メソッドがあります。

class Entity {
    public static String getClass() {
        return Entity.class.getClass();
    }
}

今度はそれを拡張した別のクラスがあります。

class User extends Entity {
}

Userのクラス名を取得したい。

System.out.println(User.getClass());

私の目標は "com.packagename.User" がコンソールに出力されることですが、代わりに "com.packagename.Entity" が出力されることになります。なぜなら Entity クラスが静的メソッドから直接参照されているからです。

もしこれが静的メソッドでなければ、これは簡単に this キーワードを使うことで簡単に解決できます。 Entity クラス(つまり return this.class.getClass() ). しかし、私はこのメソッドが静的なままである必要があります。 これにアプローチする方法について何か提案はありますか?

どのように解決するのですか?

不可能です。静的メソッドはどのような方法でもランタイムポリモーフィックではありません。これらのケースを区別することは絶対に不可能です。

System.out.println(Entity.getClass());
System.out.println(User.getClass());

これらは同じバイトコードにコンパイルされます(メソッドが Entity ).

それに、このメソッドがポリモーフィックであることに意味を見出すような呼び方はどうでしょうか?