que no entiende la diferencia entre: MyClass.class
y Class.forName("className")
.
Porque ambos necesitarán Nombre de clase.
La gran diferencia es cuando lo necesitan. Dado que Class.forName
acepta una cadena , el nombre de la clase se puede determinar en tiempo de ejecución. Mientras que, por supuesto, MyClass.class
se determina en tiempo de compilación. Esto hace que Class.forName
sea útil para cargar clases de forma dinámica en función de la configuración (por ejemplo, cargar controladores de bases de datos según la configuración de un archivo de configuración).
Completando cosas: obj.getClass()
es útil porque puede que no sepa la clase real de un objeto — por ejemplo, en un método en el que acepta un argumento mediante una interfaz, en lugar de clase, como en foo(Map m)
. No conoce la clase de m
, solo que es algo que implementa Map
. (Y el 99% de las veces, se debe sin cuidado lo que su clase es, pero que el 1% cultivos de vez en cuando.)
posible duplicado de [¿Cuál es la diferencia entre llamar a MyClass.class y MyClass.getClass()] (http://stackoverflow.com/questions/2467970/whats-the-difference-between-calling- myclass-class-and- myclass- getclass) –
Las sugerencias o implicaciones hechas en varias respuestas de que MyClass.class no causa una búsqueda en tiempo de ejecución son falsas. Solo causa una búsqueda * * * en tiempo de ejecución cuando se carga la clase que contiene la referencia. y una falla de búsqueda es fatal para esa carga. – EJP