2012-09-28 15 views
16

W Javie, można bezpiecznie założyć, że getClass() wywołany wewnątrz konstruktora klasy używanej jako klasa podstawowa dostarczy informacji o klasie pochodnej, a nie klasa klasy bazowej?Która klasa pobiera raport getClass() wewnątrz konstruktora klasy bazowej

Wydaje się działać, ale myślę, że to nie musi oznaczać, że jest bezpieczny. Na przykład, jeśli mam dwie następujące klasy:

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

I:

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

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

Kiedy uruchomić metodę main() w pochodnych klasy drukuje: Derived (co jest to, czego oczekiwałem) . Ale czy mogę polegać na tym zachowaniu na maszynach JVM?

+1

Używałbym go do rejestrowania celów .. –

+0

z interfejsów API java doc, ** Zwraca klasę środowiska wykonawczego obiektu. Ten obiekt klasy jest obiektem, który jest blokowany przez statyczne zsynchronizowane metody reprezentowanej klasy. ** – user1406062

+0

Co do tego, czy jest "bezpieczny", czy nie, powiedziałbym, że to zależy od tego, co planujesz z tym zrobić. Naprawdę po prostu logujesz nazwę? Na dłuższą metę nie wydaje się to zbyt użyteczne, ale tak, to będzie "bezpieczne" i wydrukuje rzeczywistą nazwę klasy tworzoną w czasie wykonywania. – jrajav

Odpowiedz

13

getClass jest jedną z metod Object „s and returns the runtime class of this:

Zwraca klasę wykonania tego obiektu. Zwrócony obiekt Class jest obiektem, który jest blokowany przez statyczne zsynchronizowane metody reprezentowanej klasy.

Tak, zawsze zwróci Derived.

Powiązane problemy