gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:42:36 25 4
gpt4 key购买 nike

假设我有一个包含 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;
}
}

最佳答案

Java: is it permissible to change Enum fields at runtime?

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

Can I have methods within the enum that change their age? It seems the compiler takes it but are there any risks / is it bad practice?

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

枚举旨在表示“事物”的稳定且固定的枚举。
您可以将它们视为常量。
来自 Oracle documentation :

An enum type is a special data type that enables for a variable to be a set of predefined constants. The variable must be equal to one of the values that have been predefined for it. Common examples include compass directions (values of NORTH, SOUTH, EAST, and WEST) and the days of the week.

Because they are constants, the names of an enum type's fields are in uppercase letters.

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

当你定义枚举时,你就这样做了:

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

private int age;

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

你的东西是 friend 的,年龄是 friend 的属性(property)。
你的枚举的问题在于你的东西似乎不是稳定的东西:友谊是移动的东西,你用来描述枚举的属性:age也不是稳定的东西。

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

关于Java:是否允许在运行时更改 Enum 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41199553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com