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

Java 是否有方法阻止列表上的集合操作?

Java 是否有方法阻止列表上的集合操作?,java,Java,我有一个项目列表,填充后我想阻止可能发生的任何更改。我正在尝试使用集合。不可修改列表,但它会阻止添加和删除,但我仍然可以使用set。所以我锁定了一个标准解决方案,比如使用Collections.unmodifiableList 对这种情况有什么想法吗 我的代码(代码是用另一种语言编写的,但我想这只是为了遵循以下方法): public SerFixo(ListJava docs for collection.unmodifiableCollection表示只能执行读取操作 看 因此,您将无法对从u

我有一个项目列表,填充后我想阻止可能发生的任何更改。我正在尝试使用
集合。不可修改列表
,但它会阻止添加和删除,但我仍然可以使用set。所以我锁定了一个标准解决方案,比如使用
Collections.unmodifiableList

对这种情况有什么想法吗

我的代码(代码是用另一种语言编写的,但我想这只是为了遵循以下方法):


public SerFixo(ListJava docs for collection.unmodifiableCollection表示只能执行读取操作


因此,您将无法对从unmodifiableList返回的List执行set操作,如果您尝试执行此操作,将导致UnsupportedOperationException

我会将该List放入类中并将其设置为private。 然后可以添加允许访问的方法

private List list;
private boolean listIsBlocked = false;    

public void addItem(Object o){
   if(listIsBlocked)return;
   //adding object to list
}
这不是一个标准解决方案,但也不难实施

 list = Collections.unmodifiableList(list); 

Collections.unmodifiableList()
为用户提供对内部列表的“只读”访问权限。对返回列表的查询操作“通读”到指定的列表,并尝试修改返回的列表,无论是直接修改还是通过其迭代器修改,都会导致
不支持操作异常
。如何说它是可修改的

请将您得到的错误代码张贴出来,以便其他人可以帮助您。它只是:list=Collections。unmodifiableList(list)
Collections.unmodifiableList
不应允许
set
操作。请发布您的代码;似乎更可能是您在某种程度上使用了错误的代码。您可以
扩展您喜欢的任何Collections类,并
@覆盖您不希望执行任何操作的任何方法。不过,请小心,有些方法依赖于其他方法你错了。Collections.unmodifiableList()会阻止集合()方法,它也将抛出UnsupportedOperationException。因此,请发布一个示例来显示您的行为。另外,请注意,只有从unmodifiableList返回的列表是不可修改的。最终得到了它,类的另一部分中有一些代码修改了原始的,我最终得到了我正在寻找的UnsupportedOperationException。这只是一个视图。它是从原始视图的其他地方进行的良性修改。我在这里发现了问题。调试本可以防止你得出错误的结论。没关系。干杯!现在你学到了一些在生活中永远不会忘记的东西。我明白你为什么会这么说,但我做了我的家庭作业,这只是proba的一个巨大的软件胆汁性行为,所以在我确定这个疑问之前,问题并不明显。嗯……问题解决了。
private List list;
private boolean listIsBlocked = false;    

public void addItem(Object o){
   if(listIsBlocked)return;
   //adding object to list
}
 list = Collections.unmodifiableList(list);