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);