如何在Java中存储字符串的常量数组

2022-09-03 17:16:49

我从应用程序中的一组特定字符串中随机选择。我将这些数据直接存储在代码中。据我所知,你不能宣布.因此,我认为枚举会很有用,它与一个单词名称一起工作:public static final String[] = {"aa", "bb"}

public enum NAMES {
  Mike, Peter, Tom, Andy
}

但是我如何存储这样的句子呢?此处的枚举失败:

public enum SECRETS {
  "George Tupou V, the King of Tonga, dies in Hong Kong at the age of 63.",
  "Joachim Gauck is elected President of Germany.",
  "Lindsey Vonn and Marcel Hirscher win the Alpine Skiing World Cup.";
}

我还应该使用什么?还是我错误地使用了枚举?


答案 1

你可以做

public static final String[] = {"aa", "bb"};

您只需要指定字段的名称:

public static final String[] STRINGS = {"aa", "bb"};

编辑:我支持Jon Skeet的答案,这是糟糕的代码实践。然后,任何人都可以修改数组的内容。您可以做的是将其声明为私有并为数组指定一个 getter。您将保留索引访问并防止意外写入:

private static final String[] STRINGS = {"aa", "bb"};

public static String getString(int index){
    return STRINGS[index];
}

我想你还需要一个方法来获取数组的长度:

public static int stringCount(){
    return STRINGS.length;
}

但是,只要你的项目很小,并且你知道自己在做什么,你就可以完全没事,只要把它公开。


答案 2

基本上,您无法创建不可变数组。最接近的是创建一个不可变的集合,例如番石榴

public static final ImmutableList<String> SECRETS = ImmutableList.of(
    "George Tupou V, the King of Tonga, dies in Hong Kong at the age of 63.", 
    "Joachim Gauck is elected President of Germany.",
    "Lindsey Vonn and Marcel Hirscher win the Alpine Skiing World Cup.");

您可以通过为每个枚举值指定一个关联的字符串来使用 ,如下所示:enum

public enum Secret {
    SECRET_0("George..."),
    SECRET_1("Joachim..."),
    SECRET_2("Lindsey...");

    private final String text;

    private Secret(String text) {
        this.text = text;
    }

    public String getText() {
        return text;
    }
}

...但是如果你只想把字符串作为一个集合,我会使用不可变列表。枚举在适当的时候是很好的,但是没有迹象表明它们在这种情况下是真正合适的。

编辑:正如在另一个答案中所指出的,这是完全有效的:

public static final String[] FOO = {"aa", "bb"};

...假设它不在内部类中(您在问题中没有在任何地方提到)。但是,这是一个非常糟糕的主意,因为数组总是可变的。它不是一个“常量”数组;引用无法更改,但其他代码可以编写:

WhateverYourTypeIs.FOO[0] = "some other value";

...我怀疑你不想要。


推荐