如何在方法中传递枚举参数

roo*_*dah -2 java parameters enums

我有2个枚举类:

public enum Dogs
{
 JACKIE("Jackie"),
 BOBBY("Bobby");
}
Run Code Online (Sandbox Code Playgroud)

public enum Cats
    {
     CHAN("Chan"),
     SPONGE("Sponge");
    }
Run Code Online (Sandbox Code Playgroud)

现在,我在其他一些类中有一个方法,希望将枚举作为参数传递,因此我可以根据需要选择其中一个。

public void findAnimal()
{
    List<Dogs> animals = Arrays.asList(Dogs.values());
    for (Dogs animal: animals)
    {
        rest of the code goes here
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,我不想提供硬编码的“狗”,而是希望有一个选择并将参数传递给方法,例如

public void (Enum enumAnimals)
{
    List<Enum> animals = Arrays.asList(Enum.values());
    for (Enum animal: animals)
}
Run Code Online (Sandbox Code Playgroud)

但是它不接受这样。是否可以将通用类型传递为“枚举”?

Tho*_*mas 5

Enum所有枚举的类,因此不会做任何事情。如果要使用多个枚举,可以让它们实现一个通用接口,但是即使那样,您也需要提供实例。可以通过反思来做到这一点,但我想告诉您,现在的权力将是灾难的根源。通常,枚举是针对静态类型的,而不是针对单个实例(例如特定的猫)的。Enum.values()AnimalType

我建议您使用类似的代码(简短的代码来简化它):

enum AnimalType { 
  CAT,
  DOG;
}

class Animal {
  String name;
  AnimalType type;

  Animal( String n, AnimalType t) {
    name = n;
    type = t;
  }
}

Set<Animal> animals = ... //create a set
animals.add( new Animal( "Jackie", AnimalType.CAT ) );
animals.add( new Animal( "Chan", AnimalType.DOG) );
...
Run Code Online (Sandbox Code Playgroud)

请注意,许多使用类似类的类的示例/教程都Animal更加关注继承,即class Cat extends Animal等。在问题的各行之间阅读使我感到这实际上是您所追求的,而不是如何使用枚举。