Java枚举类型名称反射

时间:2017-08-03 14:04:53

标签: java reflection enums

我想从枚举类型本身中检索枚举类型的名称:

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

4 个答案:

答案 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);
  }
}

狗和猫延伸动物。