假设我有两个声明对象的不同类: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类中的方法?我必须把它当作狗吗?如果我必须抛弃它,它是否会失去通过这种方法生成它的目的?再次感谢。
答案 0 :(得分:1)
一种替代方法是让Cat
和Dog
都实现/扩展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()来完成它,但除非您在编译时知道类名将是什么,否则您将无法将其强制转换为所需类型。所以你仍然会留下一个对象。