从Java中的变量创建新类

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (13)

有没有一种方法可以从Java中的字符串变量创建一个新的类?

String className = "Class1";
//pseudocode follows
Object xyz = new className(param1, param2);

而且,如果可能的话,结果对象必须是对象类型吗?

也许有更好的方法,但我希望能够从XML文件中检索值,然后创建以这些字符串命名的类。每个类都实现相同的接口,并且派生自同一个父类,因此我将能够在该类中调用特定的方法。

提问于
用户回答回答于

这就是你想要做的:

String className = "Class1";
Object xyz = Class.forName(className).newInstance();

注意,newInstance方法不允许使用参数化构造函数。

如果确实需要使用参数化构造函数,则需要这样做:

import java.lang.reflect.*;

Param1Type param1;
Param2Type param2;
String className = "Class1";
Class cl = Class.forName(className);
Constructor con = cl.getConstructor(Param1Type.class, Param2Type.class);
Object xyz = con.newInstance(param1, param2);

用户回答回答于

是的,你可以使用反射,使用Class.forName(name),给定字符串名称加载类路径,获取构造函数并调用它。我会以你为例。

考虑我有一个类:

com.crossedstreams.thingy.Foo

其中有签名的构造函数:

Foo(String a, String b);

我将基于这两个事实来实例化这个类,如下所示:

// Load the Class. Must use fully qualified name here!
Class clazz = Class.forName("com.crossedstreams.thingy.Foo");

// I need an array as follows to describe the signature
Class[] parameters = new Class[] {String.class, String.class};

// Now I can get a reference to the right constructor
Constructor constructor = clazz.getConstructor(parameters);

// And I can use that Constructor to instantiate the class
Object o = constructor.newInstance(new Object[] {"one", "two"});

// To prove it's really there...
System.out.println(o);

输出:

com.crossedstreams.thingy.Foo@20cf2c80

扫码关注云+社区