我通过ibatis从数据库中选择了一个id列表,但是当尝试add
一个新元素时,它抛出一个不受支持的异常。无法修改ibatis的列表返回? (抛出UnsupportedOperationException)
ibatis返回的列表是最终的还是不可变的?
我通过ibatis从数据库中选择了一个id列表,但是当尝试add
一个新元素时,它抛出一个不受支持的异常。无法修改ibatis的列表返回? (抛出UnsupportedOperationException)
ibatis返回的列表是最终的还是不可变的?
是的,它是一个只读列表,并且可以通过数据库光标支持,当您在列表中迭代时读取和缓存。在你操纵你的数据之前,你应该复制它。
List<Long> ids = new ArrayList<Long>();
ids.addAll(ibatusIds);
有关于“可能由数据库游标支持”的更多详细信息? – x4snowman
只是大多数ORM都这么做。我不明白ibatis。 –
这不是最终的:final是* variable *的一个属性,并且不是对象的属性。它只是防止将变量重新分配给。 list * object *是不可变的,这是通过在试图对它进行变异时抛出异常来实现的。 (最后的其他含义在这里无关紧要。) – 2011-12-02 06:57:07
@pst抛出一个异常不会实现不变性。一个错误的实现可能会添加新的元素,然后抛出一个异常。或者一个替代实现可以默默无闻。抛出异常只是一个信号。 – emory
@emory是的。 List的实现在这里没有做什么,堆栈显示,最后一次调用是从AbstracList public void add(int index,E element)。 – x4snowman