[英]Java enum type name reflection
我想從枚舉類型本身中檢索枚舉類型的名稱:
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
不要使用反射。 它不夠健壯。 提供一種提供此信息的方法。
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);
}
}
您可以在枚舉常量上使用name()
方法來獲取枚舉常量的名稱:
enum Mammals {
DOG(),
CAT();
public String alias;
Mammals() {
this.alias = name().toLowerCase();
System.out.println(alias);
}
}
name()
方法是編譯器在enum
類型上自動添加的。
enum Mammals {
DOG(new Dog()),
CAT(new Cat());
public String alias;
Mammals(DogOrCat value){
this.alias=name().toLowerCase();
System.out.println(alias);
}
}
或使用toString()
,默認情況下是使用name
實現的。
使用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);
}
}
狗和貓延伸動物的地方。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.