簡體   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