首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java:允许在运行时更改Enum字段吗?

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

Stack Overflow用户
提问于 2016-12-17 22:23:53
回答 1查看 2.4K关注 0票数 1

假设我有一个与BOB和ALICE的枚举,我将他们的年龄存储在一个字段中。我是否可以在枚举中使用更改其使用年限的方法?似乎编译器接受了它,但这是否有任何风险/这是不好的做法吗?举个例子:

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;
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-17 22:46:31

Enum :允许在运行时更改

字段吗?

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

我可以在枚举中使用方法来改变它们的生命周期吗?似乎编译器接受了它,但这是否有任何风险/这是不好的做法吗?

是的,你可以,但这似乎是一个笨拙的使用枚举。

枚举被设计为表示“事物”的稳定和固定的枚举。

您可以将它们视为常量。

Oracle documentation中:

枚举类型是一种特殊的数据类型,它允许变量是一组预定义的常量。该变量必须等于为其预定义的值之一。常见的示例包括指南针方向(值为北、南、东和西)和星期几。

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

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

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

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

    private int age;

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

你的东西是朋友,年龄是朋友的财产。

枚举的问题是,您的东西似乎不是稳定的东西:友谊是可以移动的东西,以及您用来描述枚举的属性:age也不是稳定的东西。

在您的示例中,您的朋友看起来像具有状态的实例。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41199553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档