繁体   English   中英

在Java中将静态变量或方法用于常量数组

[英]Use a static variable or method for a constant array in Java

我想知道使用最终的静态变量或方法在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"

澄清一下:我特别想提供一个颜色名称列表,以便随后与正则表达式匹配。

有什么确定的方法通常可以解决此问题吗?

您可以使用枚举

public enum Color{ 

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

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

  public String getColor() {
    return color;
  }
 }

这个问题不适合使用Enum 我个人不会使用任何方法。 但是,天气静态数组是一个好的解决方案吗? 最好使用java枚举来解决。

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

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

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

 array[0] = "1";

但是您将无法完全用另一阵列替换该阵列。 如果值将发生很大变化(尤其是数目将发生变化) ,则可能值得考虑使用List

如果可以使用列表,则可以选择以下一种方法:

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(); }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM