当enum对象存在时,为什么getEnum返回null?

时间:2012-05-17 16:59:28

标签: java java-ee enums apache-commons

我正在看一个类似下面的类。我更改了类名和变量名,以避免将实际的公司名称放在这里(抱歉)。

import org.apache.commons.lang.enums.Enum;

public class Animal extends Enum {

    public static final Animal DOG = new Animal("Dog");
    public static final Animal CAT = new Animal("Cat");

    private Animal(String name) {
        super(name);
    }

    public static Animal getAnimal(String code) {
        return (Animal) getEnum(Animal.class, code);
    }
}

当getAnimal以“Dog”作为参数传递时,它返回一个Animal。但是,当将“Cat”作为参数传递时,它将返回null。为什么会发生这样的事情?

2 个答案:

答案 0 :(得分:1)

在现代Java中,你会写:

enum Animal {
    Dog, Cat;
}

并使用

Animal.valueOf(name)

从名称中获取枚举值。 (Java 5中添加了枚举类型,已在7年多前发布。)

如果你仍然坚持不支持枚举的Java版本,一种方法是调试org.apache.commons.lang.enums.Enum.getValue。实施很难成为火箭科学; - )

答案 1 :(得分:0)

我认为您需要扩展ValuedEnum而不是Enum(请参阅documentation中的示例)