Java 如何从方法打印出枚举名称

Java 如何从方法打印出枚举名称,java,Java,我正在尝试构建一个方法,当我的switch语句找到合适的匹配项时,它将打印出一个枚举,下面是我的尝试。我可以通过在每个case语句中添加一个System.out.println(“”),但是我觉得有更好的方法 enum animals { ANIMAL_CAT, ANIMAL_DOG, ANIMAL_SNAKE, } public static animals getAnimal(char ch) { switch (ch) { cas

我正在尝试构建一个方法,当我的switch语句找到合适的匹配项时,它将打印出一个枚举,下面是我的尝试。我可以通过在每个case语句中添加一个
System.out.println(“”
),但是我觉得有更好的方法

enum  animals
{
    ANIMAL_CAT,
    ANIMAL_DOG,
    ANIMAL_SNAKE,
}

public static animals getAnimal(char ch)
{
    switch (ch)
    {
        case 'C':
            return animals.ANIMAL_CAT;
        case 'D':
            return  animals.ANIMAL_DOG;
        case 'S':
            return animals.ANIMAL_SNAKE;
    }

    return animals;

}

public static void main(String [] args)
{
    getAnimal('C'); // output: ANIMAL_CAT
    getAnimal('D'); // etc
    getAnimal('S');
}

可以从枚举对象检索名称:
getAnimals(“XYZ”).name()

以下代码按照您的预期工作


class sample{
    enum  animals
    {
        ANIMAL_CAT,
        ANIMAL_DOG,
        ANIMAL_SNAKE,
        NO_ANIMAL
    }

    public static animals getAnimal(char ch)
    {
        switch (ch)
        {
            case 'C':
                return animals.ANIMAL_CAT;
            case 'D':
                return  animals.ANIMAL_DOG;
            case 'S':
                return animals.ANIMAL_SNAKE;
            default:
                return animals.NO_ANIMAL;
        }

    }

    public static void main(String [] args)
    {
        System.out.println(getAnimal('C')); // output: ANIMAL_CAT
        System.out.println(getAnimal('D')); // etc
        System.out.println(getAnimal('S'));
    }

}
输出

ANIMAL_CAT
ANIMAL_DOG
ANIMAL_SNAKE

enum仍然是类,应该这样对待。因此,给动物类提供做你想做的事情所需的能力

enum Animals {
        ANIMAL_CAT('C'), ANIMAL_DOG('D'), ANIMAL_SNAKE('S');
    private final char internalValue;

    private Animals(final char internalValue) {
        this.internalValue = internalValue;
    }

    public static Optional<Animals> fromInternalValue(final char ch) {
        return Arrays.stream(Animals.values()).filter(candidate -> candidate.internalValue == ch).findFirst();
    }

    public void print() {
        System.out.println(this.toString());
    }
}

public static void main(final String[] args) {
    Animals.fromInternalValue('C').ifPresent(Animals::print);
    Animals.fromInternalValue('D').ifPresent(Animals::print);
    Animals.fromInternalValue('S').ifPresent(Animals::print);
}
枚举动物{
动物猫('C')、动物狗('D')、动物蛇('S');
私人最终价值;
私人动物(最终价值){
this.internalValue=internalValue;
}
公共静态可选fromInternalValue(最终字符){
返回Arrays.stream(Animals.values()).filter(candidate->candidate.internalValue==ch.findFirst();
}
公开作废印刷品(){
System.out.println(this.toString());
}
}
公共静态void main(最终字符串[]args){
动物。fromInternalValue('C')。如果存在(动物::打印);
动物。fromInternalValue('D')。如果存在(动物::打印);
动物。fromInternalValue('S')。如果存在(动物::打印);
}

您不能,在Java中,给定给枚举的名称是常量,没有可用的常量名称。尝试使用映射,然后您可以使用文本字符串来唯一标识每个值。@Splaten他可以创建一个构造函数并为每个枚举键分配字符串文本。@Splaten-当然可以:调用枚举常量的值返回枚举常量的名称。请检查这个小建议,在枚举中保存
Animals.values()
private
副本。否则每次调用
fromInternalValue()
时都会创建
Animals.values()
的新副本