java 字符串到类

java String to class

提问人:MANU SINHA 提问时间:10/27/2010 最后编辑:jmd_dkMANU SINHA 更新时间:11/1/2019 访问量:36954

问:

我有一个名为 的 bean 类。在我的主方法中,我有一个包含变量名称的字符串:Bean1

String str= "Bean1"; 

现在如何使用变量来获取类并访问 Bean 属性?String

java 变量

评论

0赞 MANU SINHA 10/27/2010
我尝试实现的功能是“在应用程序的运行时创建了一个 Inetrface 和相关的 Bean 类。我能够获得 bean 类和接口所在的路径。现在我得到了一个类“SrcInfo”,其中 mehtod 列表和 Bean 的参数作为类变量提供。现在我必须动态创建一个 java 类,我需要创建一个方法,该方法将 Bean 对象作为参数,并通过操作 Bean 对象中包含的数据返回 HashMap。因此,我得到了 bean 类名称作为 String 变量

答:

13赞 Kel 10/27/2010 #1

您应该使用 Java Reflection API:

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

然后,你可以使用 c.newInstance() 来实例化你的类。此方法使用不需要参数的构造函数。

详情请见:http://download.oracle.com/javase/tutorial/reflect/

评论

3赞 cherouvim 10/27/2010
他可能还需要一个 Bean1 的实例
0赞 MANU SINHA 10/27/2010
我尝试实现的功能是“在应用程序的运行时创建了一个 Inetrface 和相关的 Bean 类。我能够获得 bean 类和接口所在的路径。现在我得到了一个类“SrcInfo”,其中 mehtod 列表和 Bean 的参数作为类变量提供。现在我必须动态创建一个 java 类,我需要创建一个方法,该方法将 Bean 对象作为参数,并通过操作 Bean 对象中包含的数据返回 HashMap。因此,我得到了 bean 类名称作为 String 变量。
0赞 Tomas Narros 10/27/2010
@MANU SINHA:您应该在问题中包含此信息(请编辑)。这是获得有用答案的重要信息
0赞 Kel 10/27/2010
坦率地说,我不了解您将要实施的完整工作流程。如果您需要按名称实例化类 - 使用我或 Tomas Narros 提供的解决方案。如果您需要访问实例字段并将其转换为 HashMap - 请使用 Class.getDeclaredFields() 和 Field.get() 方法。您可以查看相应的 JavaDoc 以获取详细信息 (download.oracle.com/javase/6/docs/api/java/lang/Class.html),或者再提一个问题以获取更多详细信息。
2赞 Nick 10/27/2010 #2

Duplicate of Java 是否支持变量?

Java 不支持基于变量名称的字符串动态获取变量(也称为变量变量)。可能有一种不同的方法可以执行您正在尝试执行的操作,例如使用 Map 对象将名称映射到 bean。如果您编辑问题以更详细地解释您想要做什么,我们可能会得到一些更具体的答案。

(另一方面,如果问题是关于一个名为 Bean1 的类,那么 Kel 是对的。

14赞 Tomas Narros 10/27/2010 #3

一步一步:

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

对于最后一步,您需要知道 Bean 的类型,或者具有您需要访问的属性的超类型。我猜你不知道,如果你拥有的关于类的所有信息都是带有其名称的字符串。

使用反射,您可以访问类的方法,但在这种情况下,您需要知道要调用的方法的名称和输入参数类型。 继续执行示例,更改步骤 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");

也许你需要重新考虑你的设计,如果你在运行时没有所有这些可用的信息。