根据字符串在运行时创建类的新对象

时间:2014-02-04 09:46:16

标签: java

假设我有3个类:GNP_US,GNP_China和GNP_India。我还有一个“starter”类,它检查args [0]中是否有字符串。这个字符串是“美国”,“中国”或“印度”。我如何根据字符串动态创建类的新实例? 我想也许是这样的:

    public static void main(String[] args)
    {
      try
      {
        Class c=Class.forName("GNP_"+args[0]);
        Object o=c.newInstance();
      }
      catch(Exception e){......} 
    }

但是因为我必须将我的对象强制转换为正确的类,所以我仍然需要使用大量的if语句来根据“country”-string来构建我的对象。当我这样做时,这给我留下了大量相同的代码行:

    [...]if(args[0].equals("US")
         {
           GNP_US us=new GNP_US();
         }

我希望你明白我要去哪里。

提前致谢!

4 个答案:

答案 0 :(得分:1)

使用Class.newInstance创建运行时实例。

答案 1 :(得分:1)

试试这个:

public static void main(String[] args) throws Exception {
        Class clazz = Class.forName("test.Demo");
        Demo demo = (Demo) clazz.newInstance();
    }

答案 2 :(得分:1)

试试这个:

public static void main(String a[]) {

    String className = str[0]; // Make sure the class name is correct
    Class c = null;
    try {
        c = Class.forName(className);
        // create instance at runtime
        Object o = c.newInstance();

    } catch (ClassNotFoundException exception) {
        // Handle
    } catch (InstantiationException exception) {
        // Handle
    } catch (IllegalAccessException exception) {
        // Handle
    }

}

注意:如果类名不正确,则会失败。请提供类名和包层次结构。

答案 3 :(得分:1)

您可以使用Java Reflections Api。 这样的事情:

Class c = Class.forName("args[0]");
Object o = c.newInstance();