在Java中定义变量类型另一个变量

时间:2012-01-24 10:06:44

标签: java class

我有一些课程,出于某种原因,我需要一个程序来创建该类的一些变量...

我们假设我有这段代码:

for (int i = 0 ; i < 5 ; i++)
{
  ....
  POP tmp = new POP();
  tmp = (POP) ast.convert(aso, POP.class);     
}

我希望POP类是dinamically设置的...我几乎达到了我想要的除了从对象到类的转换,我不知道怎么写它...

String className = "POP";
Class cl = Class.forName(className);
Class cl2 = POP.class;
cl = (??????) ast.convert(aso, cl2);

我该如何解决?

1 个答案:

答案 0 :(得分:1)

在您的第二个代码段中,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实例时,您可以使用反射动态创建新实例:

    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