2011-12-02 48 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。 –