将Enum类型值作为Java中的参数传递

Ala*_*ght 1 java enums

我知道我可以使用下面伪代码描述的概念来检查String是否包含在特定的枚举中(我知道没有contains方法Enum,这只是我的例子):

Enum Animal {
    Dog,
    Cat,
    Human
}

public boolean CheckAnimalValid(String name){
    return Animal.contains(name)? true : false;
}
Run Code Online (Sandbox Code Playgroud)

但在以前的方式中,我需要为每个Enum类实现CheckValid方法,因为我需要知道应该检查WHICH Enum类.

我想知道是否有任何方法将Enum类型作为参数传递给函数,以便我可以这样做:

Enum Animal {
        Dog,
        Cat,
        Person
    }

Enum Plant {
    Grass,
    Flower,
    Tree
}

public boolean CheckEnumValid(String name, what_should_I_do? enum){
    return enum.contains(name)? true : false;
}
Run Code Online (Sandbox Code Playgroud)

我想知道what_should_I_do应该使用哪种类型(或关键字)在前面的代码中.我知道我应该使用泛型,但我不知道该怎么做.谢谢!

kap*_*pex 5

如果名称与该类型的枚举常量匹配,则可以使用Enum.valueOf(Class<T> enumType, String name)返回类型枚举的静态方法T.否则抛出一个IllegalArgumentException.

用法示例:

Enum.valueOf(Plant.class, "Flower");
Run Code Online (Sandbox Code Playgroud)

包含在返回布尔值的方法中:

public <T extends Enum<T>> boolean checkValid(Class<T> enumType, String name){
    try {
        Enum.valueOf(enumType, name);
        return true;
    } catch(IllegalArgumentException e) {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • `Plant.class` 应该是 `enumType`,而 `enumType` 应该真的是 `Class&lt;E extends Enum&lt;E&gt;&gt;`,以获得更多的类型安全性。 (2认同)