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

标签 java enums

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

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

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

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
    }
}

但我不确定到底如何。

最佳答案

是的,这是可能的,顺便说一句。我会稍微重构一下你的代码并在这里使用一些面向对象的概念。请看下面。

枚举:

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/

相关文章:

java - 设置客户端 SASL 身份验证以连接两个不同的 kafka 集群

iphone - 检查 C 枚举是否存在

java - 列表中枚举值的持久性注释

Java 8 流 : convert comma separated string to the list of abstract Enum

java - 设置 jtable 某些行的前景色

java - 位图未显示在对话框中

java - 在 Linux 上部署 spring boot 应用程序时,日志文件端点出现错误 404

java - 扩展泛型类

java - Json Java 中的 Enum 列表

导入的枚举在 Dart 编辑器中被标记为未定义的类