2011-12-02 28 views
1

我通过ibatis从数据库中选择了一个id列表,但是当尝试add一个新元素时,它抛出一个不受支持的异常。无法修改ibatis的列表返回? (抛出UnsupportedOperationException)

ibatis返回的列表是最终的还是不可变的?

+0

这不是最终的:final是* variable *的一个属性,并且不是对象的属性。它只是防止将变量重新分配给。 list * object *是不可变的,这是通过在试图对它进行变异时抛出异常来实现的。 (最后的其他含义在这里无关紧要。) – 2011-12-02 06:57:07

+0

@pst抛出一个异常不会实现不变性。一个错误的实现可能会添加新的元素,然后抛出一个异常。或者一个替代实现可以默默无闻。抛出异常只是一个信号。 – emory

+0

@emory是的。 List的实现在这里没有做什么,堆栈显示,最后一次调用是从AbstracList public void add(int index,E element)。 – x4snowman

回答

2

是的,它是一个只读列表,并且可以通过数据库光标支持,当您在列表中迭代时读取和缓存。在你操纵你的数据之前,你应该复制它。

List<Long> ids = new ArrayList<Long>(); 
ids.addAll(ibatusIds); 
+0

有关于“可能由数据库游标支持”的更多详细信息? – x4snowman

+0

只是大多数ORM都这么做。我不明白ibatis。 –

相关问题