質問: のようにmasterというアプリケーション全体で共通の変数を取り出し、 public class Master { HashMap user_list=new HashMap(); public User getUser(String id){ return user_list.get(id); } } そこから User user=master.getUser(3); のようにmaster内のHashMapの中から何か変数を取り出したとします。 この時、何故か上記のuserに値をセット user.setAge(12); 等としてもmasterの方のuserには影響せず。 この流れで取り出した上記のuserにのみ影響しています。 上記のmasterから取り出したuserは何か参照もmaster内の物と違うようです。 どうすればmaster内のuserの値を変更できるのでしょうか・・・
回答: 次のようなJSPを書いてみました。 ※動的Webモジュールはバージョン3.0です。 ※`Master`と`User`には`toString`をoverride実装してあります。 アクセスするたび、年齢の値が加算されるのが分かります。 もし取り出した情報を更新できないとしたら、このように動作しないはずです。 koujiさんが質問に書かれていない何かが影響している可能性はありますが、基本的には値の更新はできるはずです。 ``` <%@ page contentType="text/html; charset=utf-8" %> <%@ page import="ap.*" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> Servlet1 master = <%= master %> <% if (!master.hasUser("John")) { master.setUser("John", new User("John", 22)); } User user = master.getUser("John"); user.setAge(user.getAge() + 1); %> master = <%= master %> ```