Javaのソースを読んでいると
User user = new User();
という記述を誰でも見る事がある。そう、インスタンスの生成である。
これ自体は理解出来るようになったが、実際にプログラムに触れていくと、下記の様な記述に出会い混乱してしまった。
public boolean userExists(String userId) {
//User型変数を使用
User user = select.selectOne(userId);
if (user == null) {
return false;
}
return true;
}
なんとそこには、newもせずにUser user
といきなり記述されていた。
「他のクラスを使用する時はnewするんだ」と漠然と思い込んでいた私からすると、訳が分からなくなってしまった。
だがそれは、単純に私の勘違いであった。
上記のselect.selectOne(userId);
というメソッドの中身を見てみると
public User selectOne(String userId) {
//データを1件取得
Map<String, Object> map = jdbc.queryForMap("SELECT * FROM m_user "
+ "WHERE user_id = ?"
, userId);
//結果返却用の変数
User user = new User();
//取得したデータをuserにセットしていく
user.setUserId((String) map.get("user_id")); //ユーザID
user.setUserName((String) map.get("user_name")); //ユーザ名
//userインスタンスを返却
return user;
}
となっている。
そう、しっかりとUser user = new User();
とnewを行って、そのuserインスタンスを戻り値として返却しているのだ。
つまり、既にUserインスタンスが生成されているから、最初のcheck.javaクラスでは新たにnewする必要がなかったのである。
言われてみれば、その都度インスタンスを新しく生成していたらよく分からない事になってしまうなと。。
そういう訳で、「newするタイミングは使う時(だけ)だよ」という言葉の理解が少し深まったのでした。たぶん。
※追記
@shiracamus 様よりアドバイス頂きました。上記に限らず、Commandパターンなるものが存在するようです。
Commandパターンでは、事前にコマンドを作っておいて、必要になったときに作っておいたコマンドを実行します。
Linuxなどで事前にコマンドをインストール(準備)しておいて、必要になったときにコマンド実行するのと同じように。
ご指摘誠にありがとうございます。まだまだJavaは奥が深いのですね。
Commandパターンというのは初耳だったので調べてみたのですが、さらっと見ただけではまだ分かりませんでした。
デザインパターンについても今後勉強させて頂きます。良いきっかけをどうもありがとうございます。