我可以迭代的常量集

时间:2015-11-03 19:32:10

标签: java android

我经常遇到需要定义一组常量的情况,我需要循环它们。让我们说卡套装我需要向用户显示可用的套装列表。

我看到的两个选项是枚举或静态int。但问题是,当我需要遍历列表时,我最终使用带有values()和Ordinal()的枚举。很多人说使用这些都很糟糕,你应该回到静态int。

你们如何编写一组常量,你需要迭代它们?什么是最佳做法?

由于

1 个答案:

答案 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 ) { ... }