回答
即使你的問題對Stack Overflow來說不是很好,但我想我明白你的意思了。
所以,你在你的代碼有
List<MyClass> myList = new ArrayList<MyClass>();
的地方,你
- 把它放在會議
- 和別的地方你做了
.clear()
就可以了。
對不對?
問題是,與您所想的相反,您只有一個ArrayList
實例。這與「在」會話中相同,即「在你的servlet中」。只有你有不同的參考指着它...
你需要做的是連接列表實例的不同實例會話什麼:
//this creates a new list instance, with references to the same objects
List<MyClass> myNewList = new ArrayList<MyClass>(myList);
與「附加」這myNewList
參加會議。這樣,最終的兩個列表可以被不同地處理,它們可以具有不同的內容。如果你改變一個,另一個將保持不變。
不過我建議重新考慮一下你的結構,共享信息總是要慎重處理的問題,Java Concurrency In Practice是處理這類問題時要讀的關鍵一本書。
許多非常感謝。我知道了 :) – user2069692 2013-03-18 07:20:41
很明顯,它會從會話中清除,因爲您正在會話中添加對數組集合的引用。因此,數組列表對象(在會話中的列表對象和代碼中的列表對象(在列表添加到會話之後)引用內存中的同一對象。因此,如果清除ArrayList對象,則會話中包含的也指向同一對象的基礎對象將變得清晰。
爲了讓您的代碼正常工作,您可以做一件事。創建ArrayList的克隆並將該列表放入會話中。然後做任何你想做的事情與你的對象。它不會影響駐留在會話中的對象。
希望這會有所幫助。
很顯然,在會話中設置ArrayList後,您繼續使用數組列表並編輯它。
但你應該知道,你在會話中設置的內容只是實際數組列表的內存引用。 您所做的任何更改仍會影響,因爲這兩個變量都指向內存中的相同列表。
爲避免你可以
1)在設置會話中數組列表,指定一個空變量,這樣你就不會在不知不覺中繼續使用它
ArrayList list = new ArrayList();
session.setAttribute("list",list);
list = null ; // Assigning the variable to null
- 1. XMPP會話附件
- 2. Strophe會話附件 - 403禁止
- 3. Java插件沒有附加到Eclipse中的調試會話中
- 4. 訪問arrarylist中的元素時出錯
- 5. 存儲在會話中的數據不會正確檢測上下文附件
- 6. Portlet URL附加會話ID?
- 7. 將對象附加到會話中
- 8. 用會話名稱填充附加的屏幕會話號碼
- 9. 類文件中的會話
- 10. 在JSX文件中的Ruby Sinatra會話?
- 11. 文件附件不會在郵件中在php中
- 12. 使用會話管理插件在wordpress中維護會話
- 13. 會話事件在春季會話中不工作
- 14. PHP會話未保存在會話文件中
- 15. 異步運行*附加*屏幕會話
- 16. Laravel會話表添加附加列
- 17. PHP會話 - 附加一個類實例
- 18. 在HTTPS會話中搜索會話ID,會話密鑰
- 19. 會話的條件
- 20. 附件中的附件
- 21. 如何將arrarylist值存儲到sqlitedb?
- 22. GNU屏幕:創建或附加到會話並獲取文件
- 23. 當連接附件時,Android tcpip ADB會話斷開連接
- 24. 擴展會話中間件
- 25. 附件不會顯示在通過iPhone發送的郵件中
- 26. 在Java Swing文件對話框中創建「附件視圖」
- 27. p:selectOneMenu下拉菜單不會附加到對話框中的組件
- 28. 在asp.net中的會話?
- 29. 在jsp/struts中的會話
- 30. 在Rails中的會話
顯示你的代碼。 .. – Sathish 2013-02-25 12:33:52
您可能正在使用同一個列表對象。 – igr 2013-02-25 12:35:18