Java:允许在运行时更改Enum字段吗?

时间:2016-12-17 14:23:53

标签: java enums

假设我有一个BOB和ALICE的Enum,我将他们的年龄存放在一个领域。我可以在枚举中使用改变其年龄的方法吗?似乎编译器接受它但是有任何风险/这是不好的做法吗?例如:

public enum Friends {
    BOB(14),
    ALICE(22);

    private int age;

    private Friends(int age){
        this.age = age;
    }

    public void setAge(int age){
        this.age = age;
    }

    public int getAge(){
       return age;
    }
}

1 个答案:

答案 0 :(得分:1)

  

Java:允许在运行时更改枚举字段吗?

您无法更改Enum本身,但是您可以更改枚举值中定义的任何字段。

  

我可以在枚举中使用改变年龄的方法吗?好像是   编译器接受它但是有任何风险/这是不好的做法吗?

是的,你可以,但似乎笨拙地使用了Enums。

枚举旨在表示稳定且固定的“事物”枚举 你可以把它们视为常数 来自Oracle documentation

  

枚举类型是一种特殊的数据类型,它允许变量   一组预定义的常量。变量必须等于其中一个   已为其预定义的值。常见的例子包括   指南针方向(NORTH,SOUTH,EAST和WEST的值)和   一周中的几天。

     

因为它们是常量,所以枚举类型字段的名称是   大写字母。

使用Java Enums,这些东西本身可以用属性来描述。

定义枚举时,可以这样做:

public enum Friends {
    BOB(14),
    ALICE(22);

    private int age;

    private Friends(int age){
        this.age = age;
    }

你的东西是朋友,年龄是朋友的财产 你的枚举问题在于你的东西似乎不是稳定的东西:友谊是移动的东西,你用来描述枚举的属性:age也不是一个稳定的东西。

在您的示例中,您的朋友看起来像是具有州的实例 因此,定义类(与Enum相对)来表示Friends并在客户端代码中实例化和修改它们似乎是一种更自然的方式来表示和操作它们。