假设我有一个枚举public enum Day { MONDAY, TUESDAY, ..., SUNDAY }
,然后我实例化一天数组Day[] days = Day[3];
。
如何为MONDAY
中的所有天数设置一天(例如days
)?如果设置如上,则day
的所有元素都为空。我希望enum的行为更像是int和Strings,它们分别初始化为0和“”。
答案 0 :(得分:75)
正如其他人所说,枚举是引用类型 - 它们只是特定类的编译器语法糖。 JVM不了解它们。这意味着该类型的默认值为null。当然,这不仅会影响数组 - 它意味着类型为枚举的任何字段的初始值也为null。
但是,你不必自己循环来填充数组,因为有一个库方法可以帮助:
Day[] days = new Day[3];
Arrays.fill(days, Day.MONDAY);
我不知道这有什么性能的好处,但它可以使代码更简单。
答案 1 :(得分:6)
枚举类似于初始化为null
。就像类一样,你需要使用循环在每个位置设置一个值。
答案 2 :(得分:6)
您可以创建填充了值的数组:
Day[] days = {Day.MONDAY, Day.MONDAY, Day.MONDAY};
或者,您可以在枚举中创建静态方法以返回默认值的数组:
enum Day { MONDAY, TUESDAY, SUNDAY;
public static Day[] arrayOfDefault(int length) {
Day[] result = new Day[length];
Arrays.fill(result, MONDAY);
return result;
}
}
Day[] days = Day.arrayOfDefault(3);
答案 3 :(得分:1)
默认情况下,Java不会这样做。你必须明确地填充数组:
final Day DEFAULT_DAY = Day.MONDAY;
Day[] days = Day[3];
for (int i = 0; i<days.length; i++)
{
days[i] = DEFAULT_DAY;
}
答案 4 :(得分:0)
我知道如何做的唯一方法就是循环遍历数组并将每个设置为星期一或0。
for (int i = 0; i < days.length; i++)
{
day[i] = Days.Monday
}
在你的枚举中放置星期一= 0也是一件好事,这样你就知道在施放它们时你会从这些值中得到什么。