我不知道我是否是唯一知道这一点的人,但是枚举的值不是隐式最终的,可以修改。
enum EnumTest {
TOTO("TOTO 1"),
TATA("TATA 2"),
;
private String str;
private EnumTest(String str) {
this.str = str;
}
@Override
public String toString() {
return str;
}
}
public static void main(String[] args) {
System.out.println(EnumTest.TATA);
EnumTest.TATA.str = "newVal";
System.out.println(EnumTest.TATA);
}
TATA 2
newVal
这些值通常是在实例创建(TOTO("TOTO 1")
)时初始化的,但是除了我自己,我从未见过有人使用final关键字来表示应为不变的枚举变量。这不是问题的重点,只是想知道我是否是唯一意识到这一点的人。
我想知道的是,是否存在用于创建可变枚举的用例?
而且我还想知道我们可以使用枚举(无论是否使用良好实践)的局限性。我还没有测试过,但是可以用Spring
bean注入一个枚举吗?至少看来我们可以注释每个实例(例如@Deprecated可以正常工作)以及方法。
一种可能的用例是惰性初始化(在第一次使用某些字段值时,如果经常根本不使用它们,则计算一些字段值),或“正常”可变单例对象(如注册表等)。
但是,在大多数情况下,枚举对象应该是不可变的,并且它们的字段是最终的。
问题内容: 我正在收到RuntimeException 枚举类型可能无法实例化 我不知道为什么 我想要的是用整数值标识年份,例如我有9,所以其他方法的年份是2006。代码: 问题答案: 您不能像这样实例化枚举。您有2种可能性 2.通过添加可以根据code(integer value)返回枚举的方法,对枚举进行以下更改。例如 然后像这样分配
这个问题可能没有具体说明,但我认为很重要。当您想要解决一个优化问题而又不太熟悉方法时,首先想到的是它。 我可以举一些简单的例子: 获取列表的min元素(非常简单) 列出集合的所有置换 列出集合的所有子集 这些问题都有成熟的解决方法。但也有问题不是很清楚: 列出两个字符串的所有(我指的不是编辑操作中最短的一个) 列出两个序列的所有 列出括号的所有可能性 我不知道用蛮力法解决这些问题。我的问题是: 是
问题内容: 这是我要完成的工作,我有一个包含一些值的枚举的类,我想对该类进行子类化并向该枚举添加更多值。这是一个不好的例子,但是: 因此HexDigits.Digit包含所有十六进制数字。那可能吗? 问题答案: 不,这不可能。最好的办法是使两个枚举实现和接口,然后使用该接口代替枚举。所以:
问题内容: 是否可以在Java枚举中使用,还是需要使用?在我的测试中,它始终有效,但是我不确定是否可以保证。特别是,在枚举上没有方法,因此我不知道是否有可能获得一个枚举,该枚举将返回不同于的值。 例如,这样可以吗: 还是我需要这样写: 问题答案: 仅需2美分:这是Sun发布的Enum.java的代码,并且是JDK的一部分:
问题内容: 我没有真正的运气可以通过使用Google来获得这种比较的简洁答案,我想先问一下,而不是自己进行耗时的评估。 我相当确定使用Enums的switch语句将比if-then-else语句执行得更快,尽管是否存在显着差异是另一个问题。 有人可以帮我一下吗? 感谢大家的快速反应,我会在以后的项目中牢记这一点。 问题答案: 是的,是的,因为一般而言,switch语句的运行速度比if / else
本文向大家介绍谈谈你可能并不了解的java枚举,包括了谈谈你可能并不了解的java枚举的使用技巧和注意事项,需要的朋友参考一下 前言 枚举在java里也算个老生长谈的内容了,每当遇到一组需要类举的数据时我们都会自然而然地使用枚举类型: 当然今天我们要探讨的并非是java中enum的基础语法,本次的主题将会深入enum的本质,并探讨部分高阶用法。本文基于Oracle JDK 14.0.2和jad v