我有一些类,出于某种原因,我需要一个过程来创建该类的一些变量。。。
假设我有这个代码:
for (int i = 0 ; i < 5 ; i++)
{
....
POP tmp = new POP();
tmp = (POP) ast.convert(aso, POP.class);
}
我希望POP类设置为普通。。。我几乎实现了我想要的,除了从对象到类的转换,我不知道如何写…
String className = "POP";
Class cl = Class.forName(className);
Class cl2 = POP.class;
cl = (??????) ast.convert(aso, cl2);
我该如何解决?
在您的第二个代码片段中,cl实际上是Class<POP>
,但cl2是Class<String>
,我想这不是您所期望的。假设您使用Java 5或更新版本进行编码,则不应使用原始类型(Class
而不是Class<?>
),这将使代码更安全、更易于阅读。
还要注意,您必须使用完全限定的类名,而不仅仅是类的简单名称。例如
Class.forName("String"); // Won't work
Class.forName("java.lang.String"); // Is what you need.
当你有一个类实例时,你可以使用反射来动态创建新的实例:
Class<?> cl2 = ... ;
// If the class has a no-arg visible constructor
Object foo = cl2.newInstance();
// Or using an explicit constructor (here with an integer and a String as arguments)
Constructor<Class<?>> cons = cl2.getConstructor(Integer.class, String.class);
Object bar = cons.newInstance(1, "baz");
但是,也许你试图实现的可以使用抽象工厂模式来实现?您提供了一个能够创建所需类型的实例的对象,并且可以根据类名选择要使用的工厂。
http://c2.com/cgi/wiki/wiki?AbstractFactoryPattern