Instanciar un objeto Java a través de la reflexión

Tengo una pregunta sobre una forma específica de instanciar un objeto Java.

Básicamente, necesito implementar un Singleton que implemente una interfaz. Actualmente trato de usar una fábrica y un poco de reflexión para hacer esto, tratando de reproducir este ejemplo (quinta publicación, precisamente).

La parte que me gusta es que a través de este método, puedo cambiar la implementación de Singleton con bastante facilidad.

El problema es que realmente no entiendo cómo recuperar el nombre de la clase. En el ejemplo anterior, System.getProperty()parece ser una forma de hacer esto, pero el ejemplo no muestra con precisión todos los tipos necesarios para hacer esto (el campo no está escrito). El problema es que no sé qué clave darle al getProperty()método. Parece que debe ser el nombre del campo estático privado singleton con .type (es decir mySingleton.name), pero no parece funcionar ...

Me gustaría saber cómo puedo recuperar el nombre de la clase.

Por cierto, si hay una mejor manera de hacer esto, estoy abierto a sugerencias.

Respuesta 1

typeName es String. Entonces, lo que necesita es un nombre de clase totalmente calificado para cargar la clase con reflejo como usted

Tipo de clase = Class.forName (typeName);

System.getProperty () es una forma de acceder a las propiedades del sistema / propiedades del entorno que tiene al momento de ejecutar el programa. Para reducirlo con un ejemplo, puede establecer la variable del sistema como se muestra a continuación: Si está en Windows:

cmd> set a.type = mytest.testclass

Si en Linux:

$ export a.type = mytest.testclass

Haga que la clase que intenta cargar esté en classpath.

Los pasos anteriores que debe realizar antes de ejecutar su programa.

En cuanto a las mejores prácticas, el enfoque anterior se puede utilizar para probar programas, pero al entrar en soluciones en tiempo real, probablemente tendrá alguna forma de leer estos nombres de clase de un archivo o base de datos. Probablemente algún tipo de parámetro de configuración.

Respuesta: 2

Me gustaría mostrar muchos gráficos en el mismo marco, como los siguientes: Este ejemplo proviene de java2s.com pero el dominio está actualmente fuera. En realidad lo estoy haciendo de esta manera pero no funciona, yo ...

Necesito usar la siguiente consulta. SELECCIONE m.member_id, cardflag FROM member m, member_attribute ma WHERE m.member_number =: memberNumber AND m.ref_club_status IN ('A', 'S') AND m.member_id = ma.member_id ...

Cómo burlarse de la expresión de Lamda usando Mockito List <String> items = new ArrayList <> (); items.add ("A"); items.add ("B"); items.add ("C"); items.add ("D"); items.add ("E"); artículos lambda ....

¿Alguien puede decirme cómo se puede reducir el tamaño de los ejecutables jcommon-1.0.16.jar y jfreechart-1.0.13.jar (principalmente jfreechart-1.0.13.jar). Necesito reducir el tamaño de mi producto incorporado que funciona en ...