Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.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_Arraylist_Collections - Fatal编程技术网

Java 在下面的场景中,是否有方法防止更改不可修改列表中的数据?

Java 在下面的场景中,是否有方法防止更改不可修改列表中的数据?,java,arraylist,collections,Java,Arraylist,Collections,这里我有一个场景,我想创建一个不可修改的列表,这样程序的其他部分就不能修改它的初始值 下面是关于我的问题的一些想法的代码片段 public class Test { public static void main(String[] args) { List<String> unmodifiableList = new ArrayList<String>(); unmodifiableList.add("test1");

这里我有一个场景,我想创建一个不可修改的列表,这样程序的其他部分就不能修改它的初始值

下面是关于我的问题的一些想法的代码片段

public class Test {

    public static void main(String[] args) {
        List<String> unmodifiableList = new ArrayList<String>();
        unmodifiableList.add("test1");
        unmodifiableList.add("test2");
        unmodifiableList = Collections.unmodifiableList(unmodifiableList);
        List<String> modifiableList = new ArrayList<String>();
        modifiableList.addAll(unmodifiableList);
        unmodifiableList = modifiableList; 
        unmodifiableList.add("test3");
        for (String s : unmodifiableList) {
          System.out.println(s);
        }
    }
}
公共类测试{
公共静态void main(字符串[]args){
List unmodifiableList=新建ArrayList();
不可修改列表。添加(“test1”);
不可修改列表。添加(“test2”);
不可修改列表=集合。不可修改列表(不可修改列表);
List modifiableList=新建ArrayList();
modifiableList.addAll(不可修改列表);
不可修改列表=可修改列表;
不可修改列表。添加(“test3”);
for(字符串s:不可修改列表){
系统输出打印项次;
}
}
}
输出: 测试1 测试2 测试3

预期产出: 测试1 测试2你能试试下面的吗

    final List<String> unmodifiableList1 = Collections.unmodifiableList(unmodifiableList);
final List<String> finalList = Collections.unmodifiableList(Arrays.asList("test1", "test2"));
final List unmodifiableList1=集合。unmodifiableList(unmodifiableList);
要避免创建额外列表,请尝试以下操作

    final List<String> unmodifiableList1 = Collections.unmodifiableList(unmodifiableList);
final List<String> finalList = Collections.unmodifiableList(Arrays.asList("test1", "test2"));
finalList=Collections.unmodifiableList(Arrays.asList(“test1”、“test2”));
你能试试下面吗

    final List<String> unmodifiableList1 = Collections.unmodifiableList(unmodifiableList);
final List<String> finalList = Collections.unmodifiableList(Arrays.asList("test1", "test2"));
final List unmodifiableList1=集合。unmodifiableList(unmodifiableList);
要避免创建额外列表,请尝试以下操作

    final List<String> unmodifiableList1 = Collections.unmodifiableList(unmodifiableList);
final List<String> finalList = Collections.unmodifiableList(Arrays.asList("test1", "test2"));
finalList=Collections.unmodifiableList(Arrays.asList(“test1”、“test2”));

这是Java,不是JavaScript。如果希望它不可修改,为什么要创建新的可修改列表?
unmodifiableList=modifiableList你认为这个语句做什么?这只是为了说明问题,但在实际应用中,如果其他开发人员可以使用上述方法修改我的不可修改列表,那么我们就失去了使其不可修改的唯一目的。请检查此项。这是Java,不是JavaScript。如果希望它不可修改,为什么要创建新的可修改列表?
unmodifiableList=modifiableList你认为这个语句做什么?这只是为了说明问题,但在实际应用中,如果其他开发人员可以使用上述方法修改我的不可修改列表,那么我们就失去了使其不可修改的唯一目的。请检查此项。这似乎可行,但我们需要创建一个额外的列表。您可以尝试此最终列表unmodifiableList=Collections.unmodifiableList(新ArrayList(“test1”、“test2”);为了避免创建额外的列表@lion_pankaj,如果使用此选项,则final list unmodifiableList=Collections.unmodifiableList(新的ArrayList(“test1”、“test2”);,它会在eclipse中给您带来编译错误,比如“构造函数ArrayList(String,String)未定义”。是的,对,您可以执行以下操作:最终列表列表=集合。不可修改列表(新的ArrayList(Arrays.asList(“test1”,“test2”));这将工作final List=Collections.unmodifiableList(新的ArrayList(Arrays.asList(“test1”、“test2”));这似乎可行,但我们需要创建一个额外的列表。您可以尝试此最终列表unmodifiableList=Collections.unmodifiableList(新ArrayList(“test1”、“test2”);为了避免创建额外的列表@lion_pankaj,如果使用此选项,则final list unmodifiableList=Collections.unmodifiableList(新的ArrayList(“test1”、“test2”);,它会在eclipse中给您带来编译错误,比如“构造函数ArrayList(String,String)未定义”。是的,对,您可以执行以下操作:最终列表列表=集合。不可修改列表(新的ArrayList(Arrays.asList(“test1”,“test2”));这将工作final List=Collections.unmodifiableList(新的ArrayList(Arrays.asList(“test1”、“test2”));