Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java常量数组_Java_Arrays_Enums - Fatal编程技术网

Java常量数组

Java常量数组,java,arrays,enums,Java,Arrays,Enums,如何在Java中声明和初始化常量数组而不使用enum static final Type[] arrayOfConstants = new Type[10]; // not an array of constants -如果您事先知道这些值,请初始化数组值并将该数组标记为final -如果最初不知道这些值,那么编写公共getter/setters方法,并将数组声明为private。在setter方法中写入逻辑,以便在对特定元素进行更改后放弃更改(或在对同一元素进行多次更改时引发异常)如果要创建

如何在Java中声明和初始化常量数组而不使用
enum

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

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


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

如果要创建不可变数组,则不能。Java中的所有数组都是可变的

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

private static final int[] MY_ARRAY = {10, 20, 30, 40, 50};
在这里,我们创建了一个长度为5的预定义数组
MY_array
,因此
MY_array[0]
10
,依此类推。注意,即使
MY_ARRAY
字段被声明为final,这并不意味着数组元素不能更改。因此,最好不要通过
public
protected
修改器将这样的数组公开


我的意思是数组组件是常量,即a[0]是一个常量变量,如公共静态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];
    }
}

如果您想循环,我建议返回数组的一个值。

如果final用于对象,您无法更改该对象的引用,但更改值是完全正确的。数组是java中的一个对象,如果您希望对象值在创建后不应更改,然后,必须使对象不可变,并且在java中不能使基元数组不可变

    final int [] finalArr={5,6,8};

     System.out.println("Value at index 0 is "+finalArr[0]);    
      //output : Value at index 0 is 5

      //perfectly fine
      finalArr[0]=41;

     System.out.println("Changed value at index 0 is "+finalArr[0]);
    //Changed value at index 0 is 41

     int[] anotherArr={7,9,6};
     // finalArr=anotherArr;
     //error : cannot assign a value to final variable finalArr
有关不可变数组的更多信息,请参考以下链接:


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

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

这篇文章已经有一段时间了 我很惊讶,为什么没有人会想到

public static final List<LanguageModel> GenderDataSource = new ArrayList<GenderModel>(){{
    add(new LanguageModel("0", "English"));
    add(new LanguageModel("1", "Hindi"));
    add(new LanguageModel("1", "Tamil"));
};};
publicstaticfinallist GenderDataSource=newarraylist(){{
添加(新语言模型(“0”、“英语”);
添加(新语言模型(“1”、“印地语”);
添加(新语言模型(“1”、“泰米尔”);
};};
其中LanguageModel只包含两个属性Id和Title,或者使用泛型类型的模型类

应该像恒久不变一样工作


--N Baua

您的意思是确保数组的值不能更改?您需要将数组封装在一个对象中,该对象可以防止突变,但允许通过getter方法通过索引进行访问。我的意思是数组组件是常量,即a[0]是一个常量变量,如公共静态final int SIZE=10;我不知道你的意思。你想给数组索引命名吗?@Vince Emigh你之前的回答对我来说很有意义。什么答案?我唯一的答案是,如果它对你的问题有帮助,你可以选择它作为接受的答案:)除非你是指我的评论,在这种情况下,我的答案包括这些信息(带有示例),你应该检查出来不,这不是常数数组,这是常数数组。我的意思是数组的组件应该是常量,而不是数组itself@AthanasiosV.,请重读我回答的第一句话。是的,你的陈述绝对正确。对不起,我的回答很快…除了零长度数组,它们是安全不可变的。问题不是“如何给数组索引命名”,而是“我怎么做一个常数数组,这件事说明了我所说的常数”你的回答是“你不能做这个无关的事,哦,顺便说一下,你应该记住这个警告,它是你问题的核心”。