2009-04-03 6 views

Respuesta

0

No puede construir nuevas clases de esta manera.

Si tiene el nombre de una clase, puede usar Class.forName (className) para cargar/referenciar una clase.

Si tiene el código de bytes para la clase que desea crear, puede hacer que un cargador de clases cargue el código de bytes y le proporcione la clase. Es probable que sea más avanzado de lo que esperaba.

+2

Pregunta sobre cómo crear una instancia de una nueva instancia de la clase, no crear el objeto Class (ni cómo obtener el código byte). Esto no debe marcarse como la respuesta correcta. Sigue leyendo a la respuesta de andri a continuación. –

+1

@RyanShillington Responde a la pregunta original. La pregunta fue editada para ser una pregunta diferente, que es lo que contestó 'andri'. –

+0

Ah, ya veo. Mi error. –

5

El Java tutorial on reflection lo cubre bien. Pero sí, básicamente Class.getConstructors, entonces Constructor.newInstance es donde está.

1

Si tiene una lista de objetos Class obtenidos a través de literales de clase, también podría hacer referencia estática a los constructores en lugar de caer en la maldad de la reflexión.

+0

Tal vez la creación de instancias se está realizando en un programa de servicio que se vinculará con varios otros programas que aún no se han creado. Llamarán al programa de servicio, cada uno con una lista diferente que contiene variables de clase para las clases que no existían cuando se escribió el programa de servicio. – RenniePet

2

Java está diseñado para que nunca puedas "engañarlo" siempre que uses java.lang/java. clases u otras bibliotecas estándar. Una de las cosas más importantes de OOP es que los objetos deben estar en un estado definido, por lo que puede estar seguro de que el constructor siempre se ejecuta. Incluso si está utilizando algunas bibliotecas de reflejos de aspecto extraño para hacer su trabajo.

Entonces, usando Class.forName ("me.Test"). NewInstance(); (o similar) bajo el capó invocará el constructor Test() por usted.

Si desea invocar otro constructor del código es algo como:

Test test = (Test)Class.forName("Test").getConstructor(String.class).newInstance("Hello World"); 

Aquí el getConstructor pregunta lo que se ve como el constructor (que quiere una cadena) y luego se le llama con una cadena.

9

sólo para añadir un punto que observa que faltan:

Puede invocar newInstance directamente en el objeto Class si tiene un constructor público nula. (El constructor nulo es el constructor sin argumentos.)

De lo contrario, puede encontrar constructores a través de Class.getConstructors() como han dicho otros.

Cuestiones relacionadas