1

假设我有一个名为 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();
...

在这种情况下,有没有办法在不使用子类(狗)的显式转换的情况下创建自身的实例(狗、猫等,不是动物类型)?

我可能错过了一个更好的多态性(就像我为什么要这样做......应该将它转换为 Object 或 Anmial :-))

感谢您帮助我在这方面变得聪明。

4

1 回答 1

4

如果有无参数构造函数,则可以使用getClass().newInstance().

getClass()在超类中使用时将为您提供实际的类this,例如Dog在您的示例中。

您的整个方法将变为:

public Animal createAnimal() {
    return getClass().newInstance();
}
于 2012-04-21T10:50:34.963 回答