[英]How could I pass enum object with nested enum in it to a method as parameter?
[英]How to pass enum parameter in a method
我有 2 个枚举类:
public enum Dogs
{
JACKIE("Jackie"),
BOBBY("Bobby");
}
和
public enum Cats
{
CHAN("Chan"),
SPONGE("Sponge");
}
现在我在其他一些类中有一个方法,我想将枚举作为参数传递,因此我可以根据需要选择其中的任何一个。
public void findAnimal()
{
List<Dogs> animals = Arrays.asList(Dogs.values());
for (Dogs animal: animals)
{
rest of the code goes here
}
}
因此,我不想提供硬编码的“Dogs”,而是希望有一个选择并将参数传递给该方法,例如
public void (Enum enumAnimals)
{
List<Enum> animals = Arrays.asList(Enum.values());
for (Enum animal: animals)
}
但它不接受它这样。 是否可以将泛型类型作为“枚举”传递?
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) );
...
请注意,许多使用像Animal
这样的类的示例/教程更侧重于继承,即class Cat extends Animal
等。在您问题的两行之间阅读让我觉得这就是您真正想要的,而不是如何使用枚举。
您尝试的方法在很大程度上不起作用,因为Enum
本身没有values
方法。 这是枚举类的隐式静态方法。
如果您绝对必须使用单独的Dogs
和Cats
枚举类型执行此操作,而不是按照Thomas 建议的方式执行此操作,则可以传入调用values
的结果:
obj.findAnimal(Dogs.values());
// or
obj.findAnimal(Cats.values());
那么该方法将很简单:
public void findAnimal(Enum[] animals) {
for (Enum animal : animals) {
System.out.println(animal);
}
}
如果是不适合某些原因,它也可以使用Class.getEnumConstants
:而不是传递在Dogs
或Cats
,你会通过他们的类:
obj.findAnimal(Dogs.class);
// or
obj.findAnimal(Cats.class);
该方法将沿着这些路线:
public void findAnimal(Class enumClass)
{
Enum[] animals = (Enum[])enumClass.getEnumConstants();
for (Enum animal: animals) {
System.out.println(animal);
}
}
(感谢Pshemo指出我的早期版本可以使用getEnumConstants
显着简化。)
不太确定你想用这种方法做什么,但你可以做这样的事情。
enum Dogs {
JACKIE("Jackie"),
BOBBY("Bobby");
private final String name;
Dogs(String name) {
this.name = name;
}
}
enum Cats {
CHAN("Chan"),
SPONGE("Sponge");
private final String name;
Cats(String name) {
this.name = name;
}
}
<E extends Enum<E>> void method(E e) {
Enum<E>[] animals = e.getClass().getEnumConstants();
for (Enum<E> animal : animals) {
System.out.println(animal);
}
}
private void test() {
method(Dogs.BOBBY);
method(Cats.CHAN);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.