Java:使用Class.forName动态获取自身的新实例

时间:2012-04-21 10:48:29

标签: java reflection

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

感谢您帮助我明白这一点。

1 个答案:

答案 0 :(得分:4)

如果存在no-args构造函数,则可以使用getClass().newInstance()

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

您的整个方法将成为:

public Animal createAnimal() {
    return getClass().newInstance();
}