Java 如何从方法打印出枚举名称
我正在尝试构建一个方法,当我的switch语句找到合适的匹配项时,它将打印出一个枚举,下面是我的尝试。我可以通过在每个case语句中添加一个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
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()
的新副本