Ява Строка в класс - PullRequest
       21

Ява Строка в класс

8 голосов
/ 27 октября 2010

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

Ответы [ 3 ]

10 голосов
/ 27 октября 2010

Шаг за шагом:

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

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

10 голосов
/ 27 октября 2010

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

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

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

Подробнее см. Здесь: http://download.oracle.com/javase/tutorial/reflect/

2 голосов
/ 27 октября 2010

Дубликат Поддерживает ли Java переменные переменные?

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

(С другой стороны, если вопрос касался класса с именем Bean1, то Kelправый.)

...