有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中将枚举类型值作为参数传递

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

Enum Animal {
    Dog,
    Cat,
    Human
}

public boolean CheckAnimalValid(String name){
    return Animal.contains(name)? true : false;
}

但是在前面的方法中,我需要为每个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;
}

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


共 (1) 个答案

  1. # 1 楼答案

    如果您实现一个通用方法,那就太好了。java允许使用contrains,因此您可以确保只传递一个枚举,而且由于接口,您可以在编译时限制哪些枚举是允许的或不允许的:

    定义这个通用方法

    public <T extends Enum<?> & ITag> void printEnum(T d) {
            System.out.println(d.name());
        }
    

    定义标记接口:

    interface ITag {
    }
    

    现在,您可以标记只在方法中有效的枚举:

    enum Color implements ITag {
        RED, GREEN, BLUE
    }
    
    enum STATE {
        ON, OFF
    }
    
    enum CONNECTION {
        UDP, TCP
    }
    

    因此,您可以检查方法在编译时是否使用了正确的参数

     printEnum(Color.GREEN); //valid
     printEnum(STATE.OFF);// invalid The method printEnum(T)... is not applicable for the arguments..
     printEnum(CONNECTION.UDP);// invalid The method printEnum(T)... is not applicable for the arguments..
     printEnum("Green"); // invalid The method printEnum(T)... is not applicable for the arguments..