17

getClass()Javaでは、基本クラスとして使用されるクラスのコンストラクター内で呼び出されると、基本クラスのクラスではなく、派生クラスに関する情報が提供されると想定しても安全ですか?

動作するように見えますが、必ずしも安全であるとは限りません。たとえば、次の 2 つのクラスがあるとします。

public class Parent {
    public Parent() {
        System.out.println(getClass().getName());
    }
}

と:

public class Derived extends Parent {
    public Derived() {
        super();
    }

    public static void main(String... args) {
        new Derived();
    }
}

main()Derived クラスでメソッドを実行すると、出力されます: Derived(これは私が望んでいたことです)。しかし、JVM 間でその動作を信頼できますか?

4

1 に答える 1

15

getClassObjectはのメソッドの1つであり、次のランタイムクラスを返しますthis

このオブジェクトのランタイムクラスを返します。返されるClassオブジェクトは、表されたクラスの静的同期メソッドによってロックされているオブジェクトです。

そうです、常に戻りDerivedます。

于 2012-09-28T10:50:29.247 に答える