In Java, è sicuro assumere che getClass()
chiamato all'interno di un costruttore di una classe utilizzata come classe base fornirà informazioni sulla classe derivata, anziché sul classe della classe base?Quale classe fa getClass() segnala all'interno di un costruttore di una classe base
Sembra funzionare, ma suppongo che non significhi necessariamente che sia sicuro. Per esempio, se ho le seguenti due classi:
public class Parent {
public Parent() {
System.out.println(getClass().getName());
}
}
E:
public class Derived extends Parent {
public Derived() {
super();
}
public static void main(String... args) {
new Derived();
}
}
Quando eseguo il metodo main()
nella classe derivata la stampa: Derived
(che è quello che speravo) . Ma posso fare affidamento su questo comportamento su JVM?
Lo userei per scopi di registrazione .. –
da API java doc, ** Restituisce la classe di runtime di un oggetto. Quell'oggetto Class è l'oggetto che è bloccato dai metodi statici sincronizzati della classe rappresentata. ** – user1406062
Se è "sicuro" o meno, direi che dipende molto da ciò che pensi di fare con esso. Stai davvero registrando il nome? Ciò non sembra molto utile a lungo termine, ma sì, sarà "sicuro" e stamperà il nome effettivo della classe istanziato in fase di runtime. – jrajav