在Java中对常量数组使用静态变量或方法
我想知道在Java中使用最终的静态变量或方法来提供常量数组是否更好 假设我们有:在Java中对常量数组使用静态变量或方法,java,arrays,static,constants,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"};} } 对我来说,第二个数组的缺点是每次调用它
public class myColor {
public final static String[] COLOR_NAMES = new String[] {"red", "green"};
public final static String[] colorNames() {return new String[] {"red", "green"};}
}
对我来说,第二个数组的缺点是每次调用它时都会创建一个新的字符串数组。但第一种方法的缺点是,任何人都可以使用颜色名称[0]=“blue”
澄清一下:我特别想为后续与正则表达式的匹配提供一个颜色名称列表
有没有什么既定的方法可以解决这个问题?您可以使用enum
public enum Color{
RED("red"), GREEN("green");
final String color;
Color(String color) {
this.color=color;
}
public String getColor() {
return color;
}
}
您可以使用enum
public enum Color{
RED("red"), GREEN("green");
final String color;
Color(String color) {
this.color=color;
}
public String getColor() {
return color;
}
}
您可以使用enum
public enum Color{
RED("red"), GREEN("green");
final String color;
Color(String color) {
this.color=color;
}
public String getColor() {
return color;
}
}
您可以使用enum
public enum Color{
RED("red"), GREEN("green");
final String color;
Color(String color) {
this.color=color;
}
public String getColor() {
return color;
}
}
这个问题适合使用
Enum
。就我个人而言,我不会为此使用任何方法。但是天气静态阵列是解决这个问题的好办法吗?最好用计算机来解决它 这个问题适合使用Enum
。就我个人而言,我不会为此使用任何方法。但是天气静态阵列是解决这个问题的好办法吗?最好用计算机来解决它 这个问题适合使用Enum
。就我个人而言,我不会为此使用任何方法。但是天气静态阵列是解决这个问题的好办法吗?最好用计算机来解决它 这个问题适合使用Enum
。就我个人而言,我不会为此使用任何方法。但是天气静态阵列是解决这个问题的好办法吗?最好用计算机来解决它 要在构造时初始化数组,可以在大括号中指定列表值:
private static final String[] STRING_ARRAY = {"red", "green", "blue"};
在我的示例中,我假设您不想更改数组的实例,因此将其声明为final。您仍然可以像这样更新单个条目:
array[0] = "1";
但您将无法使用完全不同的阵列替换阵列。如果值将发生很大的变化,特别是如果值的数量将发生变化,那么可能需要考虑使用列表来代替。要在构建时初始化数组,可以在大括号中指定列表值:
private static final String[] STRING_ARRAY = {"red", "green", "blue"};
在我的示例中,我假设您不想更改数组的实例,因此将其声明为final。您仍然可以像这样更新单个条目:
array[0] = "1";
但您将无法使用完全不同的阵列替换阵列。如果值将发生很大的变化,特别是如果值的数量将发生变化,那么可能需要考虑使用列表来代替。要在构建时初始化数组,可以在大括号中指定列表值:
private static final String[] STRING_ARRAY = {"red", "green", "blue"};
在我的示例中,我假设您不想更改数组的实例,因此将其声明为final。您仍然可以像这样更新单个条目:
array[0] = "1";
但您将无法使用完全不同的阵列替换阵列。如果值将发生很大的变化,特别是如果值的数量将发生变化,那么可能需要考虑使用列表来代替。要在构建时初始化数组,可以在大括号中指定列表值:
private static final String[] STRING_ARRAY = {"red", "green", "blue"};
在我的示例中,我假设您不想更改数组的实例,因此将其声明为final。您仍然可以像这样更新单个条目:
array[0] = "1";
但您将无法使用完全不同的阵列替换阵列。如果值将发生很大变化,尤其是如果值的数量将发生变化,那么可能值得考虑使用列表来代替。如果可以使用列表,一个选项是:
public final static List<String> COLOR_NAMES = Collections.unmodifiableList(
Arrays.asList("red", "green"));
否则,您的第二个选项很好,尽管我会写它:
private final String[] COLOR_NAMES = {"red", "green"};
public static String[] getColorNames() { return COLOR_NAMES.clone(); }
如果您可以使用列表,一个选项是:
public final static List<String> COLOR_NAMES = Collections.unmodifiableList(
Arrays.asList("red", "green"));
否则,您的第二个选项很好,尽管我会写它:
private final String[] COLOR_NAMES = {"red", "green"};
public static String[] getColorNames() { return COLOR_NAMES.clone(); }
如果您可以使用列表,一个选项是:
public final static List<String> COLOR_NAMES = Collections.unmodifiableList(
Arrays.asList("red", "green"));
否则,您的第二个选项很好,尽管我会写它:
private final String[] COLOR_NAMES = {"red", "green"};
public static String[] getColorNames() { return COLOR_NAMES.clone(); }
如果您可以使用列表,一个选项是:
public final static List<String> COLOR_NAMES = Collections.unmodifiableList(
Arrays.asList("red", "green"));
否则,您的第二个选项很好,尽管我会写它:
private final String[] COLOR_NAMES = {"red", "green"};
public static String[] getColorNames() { return COLOR_NAMES.clone(); }
这是使用
Enum
的示例,但第一个示例有一个缺点,即任何人都可以使用COLOR_NAMES[0]=“blue”。为什么这是一个劣势?这是一个最终数组,不是吗?或者使用枚举。。。也许?@cbach数组是最终的,但不是它的内容。这是使用Enum
的示例,但第一个数组有一个缺点,任何人都可以使用COLOR\u NAMES[0]=“blue”。为什么这是一个劣势?这是一个最终数组,不是吗?或者使用枚举。。。也许?@cbach数组是最终的,但不是它的内容。这是使用Enum
的示例,但第一个数组有一个缺点,任何人都可以使用COLOR\u NAMES[0]=“blue”。为什么这是一个劣势?这是一个最终数组,不是吗?或者使用枚举。。。也许?@cbach数组是最终的,但不是它的内容。这是使用Enum
的示例,但第一个数组有一个缺点,任何人都可以使用COLOR\u NAMES[0]=“blue”。为什么这是一个劣势?这是一个最终数组,不是吗?或者使用枚举。。。可能?@cbach数组是最终的,但不是它的内容。您可以将color
设置为最终的和私有的。如何获取所有已定义枚举名称的列表/数组?color.values()
将返回所有枚举的color[]
,但我必须将它们转换为字符串数组-->这并不比首先使用方法更好。虽然我承认枚举更优雅。您可以将color
设置为最终和私有。如何获取所有已定义枚举名称的列表/数组?color.values()
将返回所有枚举的color[]
,但我必须将它们转换为字符串数组-->这并不比首先使用方法更好。尽管我承认枚举更优雅。您可以将color
设置为最终和私有。如何获取所有已定义枚举名称的列表/数组?color.values()
wi