ロゴ

プログラミング初心者がアプリ開発を目指すブログ

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をまとめておきます。
UML

シリーズの第7回の時と比べると、圧倒的にシンプルで綺麗なコードになりました。

(追記)
よくよく考えたら自作したDateクラスも要らないんですよね、、、
気づいてはいたんですけど、思い入れがあったので見てみぬふりをしていましたが
やっぱり、あきらかにいらなかったので削除しました。

アプリ開発記の次の記事はこちら => Java Swingテキストフィールドの使い方 – Javaでデスクトップトップアプリ(予定&ToDo管理)を作る-014

スポンサード リンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA