2010-10-27 15 views
7

Tengo un nombre de clase de bean como "Bean1". En mi método principal, tengo una cadena que contiene el nombre de la variable. String str = "Bean1"; Ahora, ¿cómo puedo usar la variable String para obtener la clase y acceder a las propiedades de Bean? Soy nuevo en Java. por favor ayuda.cadena java a clase

+0

La funcionalidad que intento implementar es que "Hay una Inetrface y clases de Bean relacionadas creadas en el tiempo de ejecución de una aplicación. Puedo obtener la ruta donde se encuentra la clase de bean y la interfaz. Ahora tengo obtuve una clase "SrcInfo" donde la lista de parámetros y los parámetros del Bean se proporcionan como variables de clase. Ahora tengo que crear dinámicamente una clase Java donde necesito crear un método que tome el objeto Bean como un argumento y devuelva un HashMap manipulando los datos contenidos en el objeto Bean. Por lo tanto, tengo el nombre de la clase de bean como String variable –

Respuesta

10

Debe utilizar Java API de reflexión:

Class c = Class.forName("package.name.Bean1"); 

entonces puede usar c.newInstance() para crear instancias de la clase. Este método usa constructor que no requiere parámetros.

Ver detalles aquí: http://download.oracle.com/javase/tutorial/reflect/

+2

, probablemente también necesite una instancia de Bean1 – cherouvim

+0

La funcionalidad que intento implementar es que "Hay una Inetrface y clases de Bean relacionadas creadas en el tiempo de ejecución de una aplicación. Puedo obtener el camino donde se encuentra la clase y la interfaz de bean. Ahora tengo una clase "SrcInfo" donde la lista de mehtod y los parámetros del Bean se proporcionan como variables de clase. Ahora tengo que crear dinámicamente una clase Java donde necesito crear un método que tome el objeto Bean como un argumento y devuelva un HashMap manipulando los datos contenidos en el objeto Bean. Por lo tanto, tengo el nombre de la clase de frijol como variable String. –

+0

@MANU SINHA: debe incluir esta información en la pregunta (edítela, por favor). Esta es información importante para obtener una respuesta útil –

1

duplicados de Does Java support variable variables?

Java no soporta obtener dinámicamente una variable basada en una cadena de su nombre (también conocido como variables variables). Es probable que haya una forma diferente de hacer lo que intenta hacer, como usar un objeto Map para asignar nombres a beans. Si edita su pregunta para explicar lo que quiere hacer con un poco más de detalle, es posible que tengamos algunas respuestas más concretas.

(Por otro lado, si la pregunta era acerca de una clase llamada Bean1, luego a la derecha de Kel.)

8

Paso a paso:

//1. As Kel has told you (+1), you need to use 
//Java reflection to get the Class Object. 
Class c = Class.forName("package.name.Bean1"); 

//2. Then, you can create a new instance of the bean. 
//Assuming your Bean1 class has an empty public constructor: 
Object o = c.newInstance(); 

//3. To access the object properties, you need to cast your object to a variable 
// of the type you need to access 
Bean1 b = (Bean1) o; 

//4. Access the properties: 
b.setValue1("aValue"); 

Para este último paso, lo que necesita saber la tipo del bean, o un supertipo con las propiedades que necesita acceder. Y supongo que no lo sabes, si toda la información que tienes en la clase es una cadena con su nombre.

Al utilizar la reflexión, puede acceder a los métodos de la clase, pero en este caso, deberá conocer los nombres y los tipos de parámetros de entrada de los métodos que se invocarán. seguir adelante con el ejemplo, cambiar los pasos 3 y 4:

// 3. Get the method "setValue1" to access the property value1, 
//which accepts one parameter, of String type: 
Method m=c.getMethod("setValue1", String.class); 

// 4. Invoke the method on object o, passing the String "newValue" as argument: 
m.invoke(o, "newValue"); 

Tal vez necesita volver a pensar su diseño, si no tiene toda esta información avalaible en tiempo de ejecución.