gpt4 book ai didi

java - 如何在java中使用反射扩展基类的多个类

转载 作者:行者123 更新时间:2023-12-01 22:19:58 25 4
gpt4 key购买 nike

我对反射(reflection)非常陌生,我想获得一些建议/帮助。我正在尝试使用基类中的反射来获取子类名称。我有多个子类(猫、狗、 Frog 等),它们都扩展了基类(动物)。

我想要做的是从子类本身获取类名,并将它们传递给构造函数,这样 Animal 就不必实例化数十个子类。下面是我不想做的事情的示例。

如果有一种方法可以动态获取子类名称,而无需经历实例化每个子类的痛苦,我很乐意看到它。非常感谢您的帮助。

class Dog extends Animal {
private String s;

public Dog() {
s = "Bark";
}

public void method() {
System.out.println("Dogs " + s);
}
}

class Cat extends Animal {
private String s;

public Cat() {
s = "Meow";
}

public void method() {
System.out.println("Cats " + s);
}
}

class Animal {
public static void main(String args[]) throws Exception {
Dog dog = new Dog();
Cat cat = new Cat();
Class cls = dog.getClass();
System.out.println("The name of class is " + cls.getName());
Constructor constructor = cls.getConstructor();
System.out.println("The name of constructor is " + constructor.getName());
}
}

最佳答案

我不明白你为什么想要子类的名称。如果问题是根据类的名称实例化类,那么最好使用抽象工厂模式。您可以创建一个包含您知道的动物的枚举

enum ANIMALS {
DOG, CAT
}

您可以创建动物界面

public interface Animal {

}

将 Animal 扩展为默认类的类

public class Dog implements Animal {

}

最后AnimalAbstractFactory为

  public class AnimalAbstractFactory {

public enum ANIMALS {
DOG, CAT
}

public Animal createAnimal(ANIMALS animal) {
switch (animal) {
case DOG:
return new Dog();
case CAT:
return new Cat();
}
return null;
}
}

请注意,现在您不需要知道子类即可实例化动物。另请注意,createAnimal 返回一个Animal,而不是子类。我希望它有帮助。

关于java - 如何在java中使用反射扩展基类的多个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58598453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com