gpt4 book ai didi

java - 我可以在 Java 中使用枚举来定义要调用/使用的类吗?如果是这样,如何?

转载 作者:行者123 更新时间:2023-11-30 08:24:13 27 4
gpt4 key购买 nike

是否可以在 Java 中使用枚举来定义我需要在运行时调用的类?

例如,如果我有 3 个枚举和 3 个类,都使用相同的接口(interface)/公共(public)方法名称,我可以评估一个字符串,看看它是否是一个有效的枚举,然后在运行时定义我将要使用的类用来调用我的方法?这可能吗?

例如,我的想法是我可以做这样的事情:

private enum animal {
Duck, Dog, Cat;
}

public isValid(String animal)
{
for(animal a : animal.values())
{
if(a.name().equalsIgnoreCase(animal))
return true;
}
return false;
}

public feedAnimal(String animal)
{
if(isValid(animal)
{
//get class to use
// call class.feed();
//maybe do more stuff
}
}

但我不确定究竟如何。

最佳答案

是的,这是可能的,顺便说一句。我会稍微重构您的代码并在此处使用一些 OO 概念。看看下面。

枚举:

public enum ValidAnimals {
DUCK(Duck.class),
DOG(Dog.class);

private ValidAnimals(Class animal){
this.animal=animal;
}
private Class animal;

public Class getAnimalClass(){
return animal;
}

public static boolean isValid(Animal otherAnimal) {
for (ValidAnimals animal : ValidAnimals.values()) {
if (animal.getAnimalClass() == otherAnimal.getClass()) {
return true;
}
}
return false;
}
}

Animal 类,将由特定动物类型使用:

public abstract class Animal {
public abstract void feedAnimal();
}

特定动物示例:

public class Dog extends Animal {
public void feedAnimal(){
System.out.println("Feeding dog");
}
}

public class Duck extends Animal{
public void feedAnimal(){
System.out.println("Feeding duck");
}
}

public class Cat extends Animal{
public void feedAnimal(){
System.out.println("Feeding cat");
}
}

以及使用上面所有写法的主类:

public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
Duck duck = new Duck();
Cat cat = new Cat();

Collection<Animal> hungryAnimals = new ArrayList<Animal>();
hungryAnimals.add(dog);
hungryAnimals.add(duck);
hungryAnimals.add(cat);

for (Animal a: hungryAnimals){
if (ValidAnimals.isValid(a)){
a.feedAnimal();
}
}
}

}

最后是预期的输出:

    Feeding dog    Feeding duck

这只猫不在名单上,它一直很饿

关于java - 我可以在 Java 中使用枚举来定义要调用/使用的类吗?如果是这样,如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23121829/

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