假设我有一个名为Dog的类,它是Animal
的子类我有一个方法需要根据字符串参数
创建动物的特定子类的实例public void createAnimalType(String animalType) {
Class clazz = Class.forName(animalType);
//Check if animalType equals Dog, or Cat, or Fox, etc
// Example
Dog dog = (Dog) clazz.newInstance();
...
在这种情况下,是否有办法在不使用显式转换为子类(Dog)的情况下创建自身实例(Dog,Cat等,而不是Animal类型)?
我可能错过了一个更好的多态性点(因为我为什么要这样做...应该将它转换为Object或Anmial :-))
感谢您帮助我明白这一点。
答案 0 :(得分:4)
如果存在no-args构造函数,则可以使用getClass().newInstance()
。
getClass()
在超类中使用时,会为您提供实际的this
类,例如Dog
。
您的整个方法将成为:
public Animal createAnimal() {
return getClass().newInstance();
}