接受String并从该名称的类创建对象

时间:2013-11-15 16:51:37

标签: java object

假设我有两个声明对象的不同类:class Cat和class Dog。它们都是对象。

现在在我的主类中,我想要接受一个String值(“Dog”或“Cat”),并创建该类型的对象。而且我不希望有案例,我在某种程度上寻找一种动态的方式来创建对象。

例如:

public static void main(String [] args){ 
       String object_name = "Dog"; 

 //this is where I want to dynamically create the object
       object_name bob = new object_name();
}

在这种情况下,它会创建一个变量名为bob的Dog对象。

感谢您的帮助。

修改##

我使用了这个方法:

public static Object generate(String type) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {


    Class<?> c = Class.forName(type);
    Constructor<?> ctor = c.getConstructor(String.class);
    Object object = ctor.newInstance("9");

    return object;
}

现在,如果我在main中创建:

Object obj = generate("Dog");

如何调用Dog类中的方法?我必须把它当作狗吗?如果我必须抛弃它,它是否会失去通过这种方法生成它的目的?再次感谢。

3 个答案:

答案 0 :(得分:1)

一种替代方法是让CatDog都实现/扩展Animal,然后执行以下操作:

public Animal fromString(String name) {
    switch (name.toLowerCase()) {
    case "dog":
        return new Dog();
    case "cat":
        return new Cat();
    default:
        return null;
    }
}

如果可能的话,我会尽量远离反思。

答案 1 :(得分:0)

如果我理解正确的话,你可以做到这一点:

String className = "com.mypackage.Dog";
Class<?> myClass = Class.forName(className);
Dog dog = (Dog) myClass.newInstance();

答案 2 :(得分:0)

您可以使用Class.forName()和.newInstance()来完成它,但除非您在编译时知道类名将是什么,否则您将无法将其强制转换为所需类型。所以你仍然会留下一个对象。