我可以使用Java中的枚举来定义要调用/使用的类吗?如果是,怎么做?
可以在Java中使用枚举来定义运行时需要调用的类吗 例如,如果我有3个枚举和3个类,它们都使用相同的接口/公共方法名,那么我可以计算一个字符串,看看它是否是有效的枚举,然后在运行时定义我将使用哪个类进行方法调用吗?这可能吗 例如,我的想法是我可以这样做:我可以使用Java中的枚举来定义要调用/使用的类吗?如果是,怎么做?,java,enums,Java,Enums,可以在Java中使用枚举来定义运行时需要调用的类吗 例如,如果我有3个枚举和3个类,它们都使用相同的接口/公共方法名,那么我可以计算一个字符串,看看它是否是有效的枚举,然后在运行时定义我将使用哪个类进行方法调用吗?这可能吗 例如,我的想法是我可以这样做: private enum animal { Duck, Dog, Cat; } public isValid(String animal) { for(animal a : animal.values()) {
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;
}
}
动物类
将由特定动物类型使用:
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();
}
}
}
}
公共类主{
公共静态void main(字符串[]args){
狗=新狗();
鸭子=新鸭子();
Cat=新的Cat();
集合hungryAnimals=new ArrayList();
饥饿动物。添加(狗);
饥饿动物。添加(鸭子);
饥饿动物。添加(猫);
用于(动物a:饥饿动物){
如果(有效期为有效期(a)){
a、 饲料动物();
}
}
}
}
最后是预期产出:
Feeding dog
Feeding duck
喂狗
喂鸭
猫不在列表中,而且它一直很饿每个枚举都有一个对象吗?使用多态性为您处理这个问题有什么不对?