Java数组的常量

时间:2015-10-13 05:54:04

标签: java arrays enums

如何在不使用enums的情况下在Java中声明和初始化常量数组?

static final Type[] arrayOfConstants = new Type[10]; // not an array of constants

6 个答案:

答案 0 :(得分:8)

如果你想创建一个不可变数组,不,你不能。 Java中的所有数组都是可变的。

如果您只想在类中预定义数组,则可以执行此操作:

private static final int[] MY_ARRAY = {10, 20, 30, 40, 50};

在这里,我们创建了一个长度为5的预定义数组MY_ARRAY,因此MY_ARRAY[0]10,依此类推。但请注意,即使MY_ARRAY字段被声明为final,也不意味着数组元素无法更改。因此,最好不要通过publicprotected修饰符将此类数组公开给公众。

答案 1 :(得分:2)

  

我的意思是数组组件是常量,即a [0]是一个常量变量,如public static final int SIZE = 10;

您无法提供数组索引名称。

您可以使用预先存在的常量的值初始化数组:

public static final int SIZE = 10;

public static final int[] CONSTANTS = { SIZE };

请记住,尽管声明了数组final,但它的值仍可能会被更改。 final只能确保您无法重新分配数组变量,因此您需要封装数组以防止变异:

final class Constants {
    public static final int SIZE = 10;

    private static final int[] CONSTANTS = { SIZE };

    public static int getConstant(int index) {
       return CONSTANTS[index];
    }
}

如果您想循环播放,我建议您返回数组的deep-copy

答案 2 :(得分:1)

如果你不想修改这些值,并且你只想访问集合的成员而不想随机访问,那么一个非常简单的解决方案而不是一个常量数组,有一个最终的不​​可变列表:

static final ImmutableList<Type> arrayOfConstants = ImmutableList.of(t1, t2, t3);

答案 3 :(得分:0)

- 如果您事先知道了这些值,请初始化数组值并将该数组标记为final

- 如果您最初不知道这些值,则编写公共getter / setters方法并将该数组声明为private。在setter方法中编写逻辑,以便在对特定元素完成后丢弃更改(或在对同一元素进行多次更改时抛出异常)

答案 4 :(得分:0)

如果final与对象一起使用,则无法更改该对象的引用,但更改该值非常精细.Array是java中的对象,如果您希望对象值不应更改,则一旦创建,则必须make对象不可变,原始数组不能在java中变成不可变的。

content_type

有关不可变数组的更多信息,请参阅以下链接:

Immutable array in Java

Is there any way to make an ordinary array immutable in Java?

答案 5 :(得分:0)

这个帖子已经开了一段时间了 我很惊讶,为什么任何人都不会想到

public static final List<LanguageModel> GenderDataSource = new ArrayList<GenderModel>(){{
    add(new LanguageModel("0", "English"));
    add(new LanguageModel("1", "Hindi"));
    add(new LanguageModel("1", "Tamil"));
};};

其中 LanguageModel 只包含两个属性Id和Title,或者使用泛型Type的模型类。

应该做得很好。

- N Baua