首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中定义一个变量类型另一个变量

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

Stack Overflow用户
提问于 2012-01-24 18:06:44
回答 1查看 130关注 0票数 0

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

让我们假设我有以下代码:

代码语言:javascript
复制
for (int i = 0 ; i < 5 ; i++)
{
  ....
  POP tmp = new POP();
  tmp = (POP) ast.convert(aso, POP.class);     
}

我希望POP类是按时间顺序设置的。我几乎实现了我想要的,除了从对象到类的转换,我不知道如何编写它……

代码语言:javascript
复制
String className = "POP";
Class cl = Class.forName(className);
Class cl2 = POP.class;
cl = (??????) ast.convert(aso, cl2);

我该怎么解决它呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-24 18:21:03

在您的第二个代码片段中,cl实际上是Class<POP>,而cl2是Class<String>,我猜这不是您所期望的。假设您正在使用Java5或更高版本进行编码,则不应该使用原始类型(Class而不是Class<?>),这将使您的代码更安全、更易于阅读。

还要注意,您必须使用完全限定的类名,而不仅仅是类的简单名称。例如

代码语言:javascript
复制
Class.forName("String"); // Won't work
Class.forName("java.lang.String"); // Is what you need.

当您拥有一个Class实例时,您可以使用反射来动态创建新实例:

代码语言:javascript
复制
    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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8984945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档