我对于value()方法如何在Java中的Enum类型中工作有点好奇。 如Java规范文档中所示,我们可以在每个循环中迭代某个枚举类型的所有值。 e.g。
for (Planet p : Planet.values()) {
System.out.printf("Your weight on %s is %f%n",
p, p.surfaceWeight(mass));
}
我认为每个循环遍历所有值。在这个调用中,我们在每个循环调用中重复调用一个方法,这样它将如何迭代所有枚举类型或值()方法使用某种迭代器。有人可以帮我提供这种方法的实施文件吗?
答案 0 :(得分:4)
values()
方法返回enum
值的数组。在Java中,您可以使用for(Object obj : arr)
语法迭代数组。这只是一种语法糖。在编译期间,将创建隐式int
局部变量,并且循环将被重写为:
Planet[] vals = Planet.values();
for(int i=0; i<vals.length; i++) {
Planet p = vals[i];
System.out.printf("Your weight on %s is %f%n",
p, p.surfaceWeight(mass));
}
答案 1 :(得分:0)
你是对的 - .values()
返回枚举可能值的数组。
此数组可用于迭代,并且在每个迭代步骤中,您将获得此Enum
的另一个值,您可以像使用其他任何值一样使用它们 - e。例如,调用它们的方法。
答案 2 :(得分:0)
方法values()
在编译时生成。
每个enum
都是java.lang.Enum
的子类。在内部,它将你的枚举元素保存在一个数组中。
调用values()
时,会生成并复制一个新数组,然后再将其返回给您。