我想从枚举类型本身中检索枚举类型的名称:
enum Mammals {
DOG(new Dog()),
CAT(new Cat());
public String alias;
Mammals(AncestorOfDogAndCat a){
this.alias=this.getClass().getName().toLowerCase();
System.out.println(alias);
}
}
当我实例化时,我得到了
Main$mammals
Main$mammals
但我想要
dog
cat
答案 0 :(得分:2)
不要使用反射。它不够健壮。提供提供此信息的方法。
interface Animal
{
String getName();
}
class Dog implements Animal
{
public String getName()
{
return "dog";
}
}
enum Mammals {
DOG(new Dog()),
CAT(new Cat());
public String alias;
Mammals (Animal animal) {
this.alias = animal.getName();
System.out.println(alias);
}
}
答案 1 :(得分:2)
您可以在枚举常量上使用name()
方法来获取枚举常量的名称:
enum Mammals {
DOG(),
CAT();
public String alias;
Mammals() {
this.alias = name().toLowerCase();
System.out.println(alias);
}
}
name()
方法是编译器在enum
类型上自动添加的。
答案 2 :(得分:0)
enum Mammals {
DOG(new Dog()),
CAT(new Cat());
public String alias;
Mammals(DogOrCat value){
this.alias=name().toLowerCase();
System.out.println(alias);
}
}
或使用toString()
,默认情况下使用name
实现。
答案 3 :(得分:0)
使用this.getClass()
将返回类本身的名称,这是枚举哺乳动物。而是接受参数并在别名的参数上使用getClass。
enum Mammals {
DOG(new Dog()),
CAT(new Cat());
public String alias;
Mammals(Animal an){
this.alias=an.getClass().getName().toLowerCase();
System.out.println(alias);
}
}
狗和猫延伸动物。