2015-11-18 26 views
6

Esiste un metodo statico della classe 'Class' che può dirci se una classe immessa dall'utente (nella forma di una stringa) è un nome di classe Java esistente valido o no?Come verificare se esiste una classe

+2

Non capisco perché tu abbia votato è una domanda valida secondo me. Benvenuto in SO! – HRgiger

+1

@HRgiger: Grazie, apprezzo. :) –

+0

Posso capire il downvote. a) La domanda è formulata male. b) Non è ben studiato c) vedi sotto –

risposta

5

È possibile verificare l'esistenza di una classe utilizzando Class.forName come questo:

try 
{ 
    Class.forName("myClassName"); 
} 
catch(ClassNotFoundException e) 
{ 

} 
+2

Tuttavia, tieni presente che questo effettivamente carica la classe , che può avere effetti collaterali. Inoltre, può fallire se la classe stessa esiste, ma non può essere caricata a causa delle classi mancanti su cui si basa. –

9

È possibile utilizzare Class.forName con alcuni parametri extra per aggirare le restrizioni in risposta di Rahul.

Class.forName(String) carica e inizializza la classe, ma Class.forName(String, boolean, ClassLoader) non lo inizializza se il secondo parametro è falso.

Se si dispone di una classe come questa:

public class Foo { 
    static { 
     System.out.println("foo loaded and initialized"); 
    } 
} 

e si dispone

Class.forName("com.example.Foo") 

l'output nella console sarà foo loaded and initialized.

Se si utilizza

Class.forName("com.example.Foo", 
       false, 
       ClassLoader.getSystemClassLoader()); 

si vedrà l'inizializzatore statico non viene chiamato.

+3

Hai aggiunto dei buoni punti! +1 –

Problemi correlati