在Java中对常量数组使用静态变量或方法

时间:2014-05-13 09:16:06

标签: java arrays static constants

我想知道使用最终的静态变量或方法在Java中提供常量数组是否更好。

说我们有:

public class myColor {
    public final static String[] COLOR_NAMES = new String[] {"red", "green"};
    public final static String[] colorNames() {return new String[] {"red", "green"};}
}

对我来说,第二个缺点是每次创建一个新的String数组。但第一个有缺点,任何人都可以做COLOR_NAMES[0] = "blue"

澄清一下:我特别希望为后续与正则表达式的匹配提供颜色名称列表。

有没有确定的方法如何解决这个问题?

4 个答案:

答案 0 :(得分:3)

您可以使用枚举

public enum Color{ 

  RED("red"), GREEN("green");
   final String color;

  Color(String color) {
    this.color=color;
  }

  public String getColor() {
    return color;
  }
 }

答案 1 :(得分:0)

使用Enum时,这个问题就失败了。就个人而言,我不会使用任何方法。但是天气静态阵列是很好的解决方案吗?最好使用java enums来解决它。

答案 2 :(得分:0)

要在构造时初始化数组,您可以使用花括号指定列表值:

private static final String[] STRING_ARRAY = {"red", "green", "blue"};

在我的示例中,我假设您不想更改数组的实例,因此已将其声明为final。您仍然可以像这样更新单个条目:

 array[0] = "1";

但是你无法完全用另一个替换阵列。如果值会发生很大的变化 - 特别是如果值的数量会发生变化 - 则可能值得考虑使用列表

答案 3 :(得分:0)

如果你可以使用列表,一个选项是:

public final static List<String> COLOR_NAMES = Collections.unmodifiableList(
                                                   Arrays.asList("red", "green"));

如果需要,您始终可以获取数组:

String[] array = COLOR_NAMES.toArray(new String[0]);

否则你的第二个选择很好,虽然我会写它:

private final String[] COLOR_NAMES = {"red", "green"};
public static String[] getColorNames() { return COLOR_NAMES.clone(); }