【问题标题】:Default or initial value for a java enum arrayjava枚举数组的默认值或初始值
【发布时间】:2011-01-11 23:55:35
【问题描述】:

假设我有一个枚举public enum Day { MONDAY, TUESDAY, ..., SUNDAY },然后我实例化一个日期数组Day[] days = Day[3];

如何将一天(例如MONDAY)设为days 中所有天的默认值?如上设置,day 的所有元素都为空。我希望 enum 表现得更像整数和字符串,它们分别初始化为 0 和 ""。

【问题讨论】:

  • 我确定 java 有,你怎么称呼它,循环结构。
  • 字符串不默认为“”。像所有对象一样,它们默认为 null。
  • 答案证明了我最初的直觉!雅虎!

标签: java enums


【解决方案1】:

正如其他人所说,枚举是引用类型——它们只是特定类的编译器语法糖。 JVM 不知道它们。这意味着该类型的默认值为 null。当然,这不仅仅影响数组——它意味着任何类型为枚举的字段的初始值也是 null。

但是,您不必自己循环来填充数组,因为有一个库方法可以提供帮助:

Day[] days = new Day[3];
Arrays.fill(days, Day.MONDAY);

我不知道这样做有什么性能好处,但它使代码更简单。

【讨论】:

  • 它确实更简单。但没有性能优势。它只是: for(int i=0,len=a.length;i
【解决方案2】:

您可以创建填充有值的数组:

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】:

    枚举的类似类被初始化为null。就像类一样,您需要使用循环在每个位置设置一个值。

    【讨论】:

      【解决方案4】:

      Java 默认不会这样做。您必须显式填充数组:

      final Day DEFAULT_DAY = Day.MONDAY;
      Day[] days = Day[3];
      for (int i = 0; i<days.length; i++)
      {
          days[i] = DEFAULT_DAY;
      }
      

      【讨论】:

        【解决方案5】:

        我知道如何做到这一点的唯一方法是循环遍历数组并将每个设置为星期一或 0。

        for (int i = 0; i < days.length; i++)
        {
        day[i] = Days.Monday
        }
        

        将 Monday = 0 放入您的枚举中也是一件好事,这样您就知道在转换它们时会从值中得到什么。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-10-27
          • 1970-01-01
          • 1970-01-01
          • 2021-08-23
          • 2020-03-27
          • 2023-04-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多