io non capito la differenza tra: MyClass.class
e Class.forName("className")
.
Perché entrambi avranno bisogno di Nome classe.
La grande differenza è quando ne hanno bisogno. Dal Class.forName
accetta una stringa , il nome della classe può essere determinato in fase di runtime. Mentre, ovviamente, lo MyClass.class
viene determinato in fase di compilazione. Questo rende Class.forName
utile per il caricamento dinamico delle classi in base alla configurazione (ad esempio, il caricamento dei driver del database dipende dalle impostazioni di un file di configurazione).
A completare le cose: obj.getClass()
è utile perché non si può conoscere la classe reale di un oggetto — per esempio, in un metodo in cui si accetta un argomento utilizzando un'interfaccia, piuttosto che di classe, come ad esempio in foo(Map m)
. Non conosci la classe m
, solo che è qualcosa che implementa Map
. (E il 99% del tempo, si dovrebbe si cura di ciò la sua classe è, ma che l'1% le colture di tanto in tanto.)
fonte
2012-06-18 04:53:25
possibile duplicato di [Qual è la differenza tra chiamare MyClass.class e MyClass.getClass()] (http://stackoverflow.com/questions/2467970/whats-the-difference- between-calling-myclass-class-and-myclass- getclass) –
I suggerimenti o le implicazioni apportate in varie risposte che MyClass.class non causa una ricerca runtime sono false. Causa solo una * richiesta di runtime * precedente, quando la classe contenente il riferimento si sta caricando! e un errore di ricerca è fatale a tale caricamento. – EJP