我经常遇到需要定义一组常量的情况,我需要循环它们。让我们说卡套装我需要向用户显示可用的套装列表。
我看到的两个选项是枚举或静态int。但问题是,当我需要遍历列表时,我最终使用带有values()和Ordinal()的枚举。很多人说使用这些都很糟糕,你应该回到静态int。
你们如何编写一组常量,你需要迭代它们?什么是最佳做法?
由于
答案 0 :(得分:4)
可以使用values()
方法。实际上,Java tutorial for enums明确提到了这一点:
编译器在创建枚举时会自动添加一些特殊方法。例如,它们有一个静态
values
方法,该方法返回一个数组,该数组按照声明的顺序包含枚举的所有值。此方法通常与for-each构造结合使用,以迭代枚举类型的值。例如,下面Planet类示例中的代码遍历太阳系中的所有行星。
for (Planet p : Planet.values()) {
System.out.printf("Your weight on %s is %f%n",
p, p.surfaceWeight(mass));
}
枚举提供了一些优于常量整数的优点,例如更强的类型检查。但是,如果您必须进行代码调整,并且确定您没有过早优化,则可以使用常量int和包含它们的数组。 免责声明:我不建议将其用于日常练习。请勿在默认情况下执行此操作。
private static final int SUIT_SPADES = 1;
private static final int SUIT_CLUBS = 2;
private static final int SUIT_HEARTS = 4;
private static final int SUIT_DIAMONDS = 8;
private static final int[] SUITS = new int[] {
SUIT_SPADES, SUIT_CLUBS, SUIT_HEARTS, SUIT_DIAMONDS };
...
for ( int suit : SUITS ) { ... }