An article on classloading afferma che il metodo getClass()
non dovrebbe essere chiamato all'interno di un costruttore perché:È sempre sicuro chiamare getClass() all'interno del costruttore della sottoclasse?
inizializzazione oggetto sarà completa solo all'uscita del codice costruttore.
L'esempio hanno dato era:
public class MyClassLoader extends ClassLoader{
public MyClassLoader(){
super(getClass().getClassLoader()); // should not call getClass() because object
// initialization will be complete only at
// the exit of the constructor code.
}
}
Tuttavia da quello che so, il metodo finale nativo getClass()
sarà sempre restituire l'oggetto di tale istanza oggetto java.lang.Class
, indipendentemente dove si chiama (in un raggio il costruttore o no).
Chiamando getClass()
all'interno del costruttore sempre ci danno problemi?
In tal caso, quali sono alcuni esempi per cui chiamare il numero getClass()
all'interno del costruttore potrebbe darci errori?
Su Eclipse, anche se dice "errore", compila e gira bene. Ho preso il file '.class' compilato e l'ho eseguito manualmente con il comando' java'. **Corre**. – Pacerier
@Pacerier a) Eclipse non è un compilatore, è un IDE; si prega di fornire la versione esatta di 'javac'/JDK e verificare il processo di compilazione chiamando' javac' sull'origine manualmente, b) non si compila, né su Ideone né sulla mia scatola, JDK 8u5, c) Si prega di inviare il esatto '. java' sorgente e file'. class' compilato online per consentire il disassemblaggio. A proposito, spero che tu non abbia copiato il codice che avevo su Ideone - l'ho modificato due volte nel frattempo, una versione effettivamente compilata * perché utilizzava 'MyClassLoader.class' invece di' getClass() ' * ... – vaxquis
Uso il compilatore ECJ di Eclipse e viene compilato in un file .class che è possibile visualizzare all'indirizzo https://drive.google.com/file/d/0B53jM4a9X2fqZHBOcldxV1Vnb2s/edit?usp=sharing. La fonte .java è già nella domanda. – Pacerier