enumで値の安全を考える – Javaでデスクトップトップアプリ(予定&ToDo管理)を作る-013
前回で内部設計の見直しは最後と言いましたが、、、
すみません、変更です。
もう1回、内部設計の話をさせてください。世の中、変更がつきものですね。
前回TaskPropertyを書き換えたわけですが、これには少し問題がありました。
例えば、
properties.put(“category”, “仕事”);
とするところを、
properties.put(“Categories”, “仕事”);
としてしまうと、
Categoriesというプロパティが新しくできてしまい、うまく検索ができなくなってしまします。
この問題を解決するためにenumというものを使ってみます。
enumで値を安全に!
enumというのは列挙型と呼ばれるものです。
列挙型を使用するとPropertyNameという型名とCATEGORY,CONTEXTといったその型で使用できる値を定義できます。
これは使っているところを見てもらう方が早いです。
[PropertyName.java]
public enum PropertyName {
CATEGORY,CONTEXT,STARTYEAR,STARTMONTH,STARTDATE,STARTWEEK,WHETHER,
FINISHYEAR,FINISHMONTH,FINISHDATE,FINISHWEEK,FINISH;
public String toString(){
switch(this){
case CATEGORY:
return "category";
case CONTEXT:
return "context";
case STARTYEAR:
return "startYear";
case STARTMONTH:
return "startMonth";
case STARTDATE:
return "startDate";
case STARTWEEK:
return "startWeek";
case WHETHER:
return "whether";
case FINISHYEAR:
return "finishYear";
case FINISHMONTH:
return "finishMonth";
case FINISHDATE:
return "finishDate";
case FINISHWEEK:
return "finishWeek";
case FINISH:
return "finish";
default:
System.out.println("Enumにありません");
return null;
}
}
}
前回のTestの一部を書き換えます。
[TaskPropertyTest1.java の一部]
~この前までのコード~
Box box =new Box();
Map properties = new HashMap();
properties.put(PropertyName.CATEGORY.toString(), "仕事");
properties.put(PropertyName.CONTEXT.toString(), "オフィス");
properties.put(PropertyName.STARTYEAR.toString(), today.getYear());
properties.put(PropertyName.STARTMONTH.toString(), today.getMonth());
properties.put(PropertyName.STARTDATE.toString(), today.getDate());
properties.put(PropertyName.STARTWEEK.toString(), today.getWeek());
properties.put(PropertyName.WHETHER.toString(), true);
box.addTask("取引先にメールを書く","打ち合わせのお礼メール",new TaskProperty(properties));
properties.clear();
このようにPropertyName.CATEGORYと打つと、enumが”category”に変換してくれます。
ここでPropertyName.CattGOriと売ってしまうとコンパイルエラーになります。
これで、値が安全になりました。
内部設計の完成!
最後にUMLをまとめておきます。
シリーズの第7回の時と比べると、圧倒的にシンプルで綺麗なコードになりました。
(追記)
よくよく考えたら自作したDateクラスも要らないんですよね、、、
気づいてはいたんですけど、思い入れがあったので見てみぬふりをしていましたが
やっぱり、あきらかにいらなかったので削除しました。
アプリ開発記の次の記事はこちら => Java Swingテキストフィールドの使い方 – Javaでデスクトップトップアプリ(予定&ToDo管理)を作る-014