2012-05-17 68 views
0

我正在看一個類似於下面的類。我更改了班級名稱和變量名稱,以避免將實際的公司名稱放在此處(對不起)。爲什麼getEnum在枚舉對象存在時返回null?

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。爲什麼會發生這樣的事情?

+8

爲什麼你不只是使用內置的Enum支持?公共枚舉動物... –

+0

這段代碼看起來很奇怪 – Ixx

+3

解釋Ryan Amos評論:除非你還在爲Java 1.4開發(這對於懶惰時代已經過時了:我們現在在Java 7),你不應該再次使用Apache lang enums。自Java 5以來,Java已經內置了對枚舉的支持。 –

回答

1

在現代Java中,你會寫:

enum Animal { 
    Dog, Cat; 
} 

,並使用

Animal.valueOf(name) 

從名稱中獲取枚舉值。 (枚舉類型已添加到Java 5中,這是在7年前發佈的。)

如果您仍然停留在不支持枚舉的Java版本上,則一種方法是調試org.apache.commons.lang.enums.Enum.getValue。實現幾乎不會是火箭科學;-)

相關問題