繁体   English   中英

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

[英]Create new object of class at runtime depending on a string

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

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

但是由于必须将对象强制转换为正确的类,因此我仍然必须使用许多if语句根据“国家/地区”字符串强制转换对象。 当我这样做时,这给我留下了几乎相同的代码行:

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

希望您了解我要去的地方。

提前致谢!

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

尝试这个:

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

尝试这个:

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
    }

}

注意:如果类名不正确,这将失败。 请提供类名以及程序包层次结构。

您可以使用Java Reflections Api。 像这样:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM