Enumbody错误我该如何解决?

时间:2012-12-04 14:53:59

标签: java enums

我正在做一份学校作业,并发现了一种名为Enum的东西。

我认为这对我的作业很有帮助。

所以我决定使用它,但是当这个错误出现的时候。

我搜索了一些关于它的东西,但我似乎无法修复它。

错误“插入enumbody以完成编译单元”出现在数字15

public enum TimeToClock {   

    9,9.5,
    10,10.5,
    11,11.5,
    12,12.5,
    13,13.5,
    14,14.5,
    15,15.5,
    16,16.5,
    17. 

}

这是尝试改进this question

中的代码

4 个答案:

答案 0 :(得分:3)

我会使用double的数组。

static final double[] timeToClock = {
    9,  9.5,
    10, 10.5,
    11, 11.5,
    12, 12.5,
    13, 13.5,
    14, 14.5,
    15, 15.5,
    16, 16.5,
    17
};

或@Puce建议列表

static final List<Double> timeToClock = Arrays.asList(
    9,  9.5,
    10, 10.5,
    11, 11.5,
    12, 12.5,
    13, 13.5,
    14, 14.5,
    15, 15.5,
    16, 16.5,
    17
);

答案 1 :(得分:1)

问题是enum的概念不仅仅用于存储一组常量,而是一组常量,这对您来说意味着什么,但实际上是枚举的实例,因此直接存储浮点数不起作用。

您插入的每个数字都必须具有合法的Java变量名称,例如:

public enum TimeToClock {
  _9(9.0f),
  _9_5(9,5f)
  ;

  public final float value;

  public TimeToClock(float value) {
    this.value = value
  }
}

通过这种方式,您可以使用_9.value引用您的字段,我想这是您可以将枚举用于特定目的的唯一方法。您可以使用其他任何东西:

  • 数组float[] values = new float[]{9f, 9.5f, .... };
  • 常量,例如public static final float _9_5 = 9.5f

如果你可以将一个含义与每个数字相关联,那么使用枚举是有意义的,在你的情况下你仍然可以通过对允许的值集进行静态编译检查而没有问题地使用它,但你可以看到语法非常笨拙因为每一个价值只是一个价值。

答案 2 :(得分:1)

枚举常量应该是适当的变量名,而在Java中,变量名不能以数字开头。你可以试试这个:

public enum TimeToClock {    
  T9, T9_5,
  T10, T10_5
  // Go on
}

答案 3 :(得分:0)

enum内不允许直接使用整数,因为整数本身没有任何意义。

大多数人会使用String s'array,因为这是实现目标的最简单方法。

但是,想象一下,如果要将计划传递给方法参数,请执行以下操作:

public void pronounceSchedule(String schedule){
   // Nothing ensures that a valid Schedule is passed !
}

使用枚举,您将获得预期的保证:

public void pronounceSchedule(TimeToClock timeToClock){
   // No need to validate the schedule since it is already assumed to be valid thanks to the compiler.
}

您可以使用:

public enum TimeToClock {
    NINE(9),
    NINE_AND_HALF(9.5f);
    // etc...

    TimeToClock(float schedule) {
        this.schedule = schedule;
    }

    public float getSchedule(){
        return schedule;
    }

    private float schedule;
}

顺便说一下,这两种方法都是有效的,实际上取决于你的背景和目标。