2012-09-28 2 views
16

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

これはうまくいくようですが、必ずしも安全であるとは限りません。

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

そして:私は、次の2つのクラスを持っている場合 はたとえば、私が派生クラスでmain()メソッドを実行すると

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

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

は、それが印刷さ:Derivedを(私が望んでいたものです) 。しかし、JVM全体でその動作に頼ることはできますか?

+1

私はログの目的に使用します。 –

+0

java doc APIから**オブジェクトのランタイムクラスを返します。そのClassオブジェクトは、表現されたクラスの静的に同期されたメソッドによってロックされるオブジェクトです** ** – user1406062

+0

それが安全かどうかに関しては、あなたがそれをどうしようとするかに大きく依存しています。あなたは本当に名前を記録していますか?長期的にはそれほど有用ではないようですが、それは "安全"になり、実行時にインスタンス化される実際のクラス名が表示されます。 – jrajav

答えて

13

getClassObjectの方法and returns the runtime class of thisのいずれかです。

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

はい、常にDerivedを返します。

関連する問題