2010-10-27 5 views
7

У меня есть имена классов bean как «Bean1». В моем основном методе у меня есть строка, содержащая имя переменной. String str = "Bean1"; Теперь, как я могу использовать переменную String, чтобы получить класс и получить доступ к свойствам Bean. Я новичок в Java. пожалуйста помоги.java Строка к классу

+0

Функциональность, которую я пытаюсь реализовать, заключается в том, что «есть класс Inetrface и связанные с ним классы Bean, созданные во время выполнения приложения. Я могу получить путь, в котором находится класс и интерфейс bean. получил класс «SrcInfo», где список mehtod и параметры Bean предоставлены как переменные класса. Теперь мне нужно динамически создать класс java, где мне нужно создать метод, который принимает объект Bean в качестве аргумента и возвращает HashMap by манипулируя данными, содержащимися в объекте Bean. Таким образом, у меня есть имя класса bean как переменная String –

ответ

10

Вы должны использовать Java Reflection API:

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

Затем вы можете использовать c.newInstance(), чтобы создать экземпляр класса. Этот метод использует конструктор, который не требует параметров.

См подробности здесь: http://download.oracle.com/javase/tutorial/reflect/

+2

, ему, вероятно, также нужен экземпляр Bean1 – cherouvim

+0

. Функциональность, которую я пытаюсь реализовать, заключается в том, что «Существует класс Inetrface и связанные с ним классы Bean, созданные на время запуска приложения. Я могу получить путь, в котором находится класс и интерфейс bean. Теперь у меня есть класс «SrcInfo», где список mehtod и параметры Bean предоставляются как переменные класса. Теперь мне нужно динамически создать класс java, где мне нужно создать метод, который принимает объект Bean в качестве аргумента и возвращает HashMap, манипулируя данными, содержащимися в объекте Bean. Таким образом, я получил имя класса bean как переменную String. –

+0

@MANU SINHA: вы должны включить эту информацию в вопрос (отредактируйте ее, пожалуйста). Это важная информация для получения полезного ответа. –

1

Дубликат Does Java support variable variables?

Java не поддерживает динамически получать переменную, основанную на шнурке от его имени (также известный как переменные переменных). Вероятно, существует другой способ сделать то, что вы пытаетесь сделать, например, использовать объект Map для сопоставления имен с beans. Если вы отредактируете свой вопрос, чтобы объяснить, что вы хотите сделать немного подробнее, у нас могут быть более конкретные ответы.

(С другой стороны, если речь шла о классе под названием Bean1, то право Кель в.)

8

Шаг за шагом:

//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"); 

Для этого последнего шага, вы должны знать тип компонента или супертип со свойствами, которые вам нужно получить. И я предполагаю, что вы этого не знаете, если вся информация, которую вы имеете в классе, является строкой с ее именем.

Используя отражение, вы можете получить доступ к методам класса, но в этом случае вам нужно будет знать имена и типы входных параметров методов, которые будут вызываться. Забегая вперед на примере, изменить шаги 3 и 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"); 

Может быть, нужно пересмотреть свой дизайн, если вы не имеете всю эту информацию avalaible во время выполнения.

Смежные вопросы