【发布时间】:2017-09-12 17:38:43
【问题描述】:
我知道为了正确迭代枚举,你应该这样做
for (Days day : Days.values() {}
我在工作日和周末的枚举 Days 中创建了 static 数组。我通过在构造函数中执行 = new Days[] {SAT, SUN} 来使用适当的 Days 值填充它们。当我迭代它们时,它们会按预期工作。
但是,当我为 Days 的所有值创建自己的静态数组时,我迷失了 - 以与以前完全相同的方式添加它们。遍历此数组后,令我惊讶的最后一个元素是null。无论 Days 枚举中有多少元素——我开始添加更多虚构的日子来测试——结果都是一样的。 “解决方案”是使其成为final。但是我想了解我做错了什么。
这告诉我在枚举构造函数中初始化数组是不好的。我的工作日/周末数组会受到类似的影响吗?这实际上是一个很大的禁忌吗?在枚举构造函数中不应该做哪些其他事情?或者更准确地说,它应该用来做什么?除了做这样的事情
enum Days {
MON("Monday");
String fullname;
private Days(String n) {fullname = n};
}
有人可以指出任何可以解释这一点的文档吗?我可能缺少一些关于 Java 枚举和/或其构造函数的明显信息。
在寻找答案的过程中,我找到了static {}——就枚举中此类静态数组的初始化而言,这是否是一种好习惯?还有其他选择吗?
编辑:因为需要准确的代码。
public enum Days {
MON, TUE, WED, THU, FRI, SAT, SUN;
public static Days[] weekdays;
public static Days[] weekend;
public static Days[] all;
Days() {
weekdays = new Days[] {MON, TUE, WED, THU, FRI};
weekend = new Days[] {SAT, SUN};
all = new Days[] {MON, TUE, WED, THU, FRI, SAT, SUN};
}
}
String s = ""
for (Days d : Days.all) {
s += d.toString(); //d is null once it reaches the last item
}
【问题讨论】:
-
不要描述你的代码。发表它。不要描述或解释你得到的错误。发布它们。
-
你能分享初始化所述数组的代码吗?
-
您能否发布导致问题的代码(并从您的问题中删除一些文本[即总结一点])?
-
这段代码甚至不应该编译:ideone.com/nRyo27。 Makoto 的回答解释了原因,但您的问题表明您正在运行它。似乎您正在运行无法编译的代码(我知道某些 IDE 允许这样做),或者您的实际代码不同。
-
标签: java enums constructor initialization