2017-06-13 77 views
-1

我对这里发生的事情感到困惑。这是一件简单的事情,但由于某种原因,我得到的是枚举的名称而不是价值。枚举值不能返回值

这里是我的类:

public class Class1{ 

    public enum SchoolEnum { 
    01("MIDDLE_SCHOOL"); 

    private String value; 

    SchoolEnum(String value) { 
     this.value = value; 
    } 

    @Override 
    public String toString() { 
     return String.valueOf(value); 
    } 
    } 

    private SchoolEnum schoolEnum = null; 

    public SchoolEnum getSchoolEnum() { 
    return schoolEnum; 
    } 

    public void setSchoolEnum (SchoolEnum schoolEnum) { 
    this.schoolEnum= schoolEnum; 
    } 

} 

在另一个类调用它通过这样的:

Class1 response = new Class1(); 
response.setSchoolEnum(Class1.SchoolEnum.valueOf("01")); 

每当我试图让01枚举的价值,我只得到01代替值MIDDLE_SCHOOL。这里发生了什么 ?

+0

我不确定我是否理解这个问题。 'SchoolEnum.valueOf'将返回一个'SchoolEnum',而不是一个String。如果您想要指向的字符串,请使用'schoolEnum.value'。当你想要字符串时,它在哪里得到枚举? – yshavit

+2

(我暂时忽略了“01”不是一个有效的枚举值名称,所以上面的代码实际上不会编译......) – yshavit

+1

我并不是无视这一点。发布的代码不会被编译。 '01'(零一)是一个非法的变量名称。 OP意味着枚举常量没有任何意义。常数_is_的值。你可以定义一个像你试图用你的非法常量做的属性并将它命名为value,这就是枚举值的“value”_attribute_。关于您应该学习的枚举,有一部分Java教程,关于变量命名的文档也会对您有所帮助。 –

回答

0

我认为你的声明是错误的。

01("MIDDLE_SCHOOL"); 

上面的声明会给你编译时错误。由于任何变量名称不能以数字开头。

您可以使用一些命名建议。

_01("MIDDLE_SCHOOL"); 
ONE("MIDDLE_SCHOOL"); 
ZERO_ONE("MIDDLE_SCHOOL");