小井土@オーエスケイです。
#横槍です。
> 福嶋@PFUです。
>
> >
> > static final String FEMALE = "FEMALE";
> > static final String MALE = "MALE";
> >
> > をクラスに加えて,文字列リテラルの繰り返しを避けるリファクタ
> > リングを掛けました.
>
> うーん…。いまいちのような…。
>
> > 他の案として,C の enum 的に Sex リテラルを作る,という案が
> > ありました.
>
> 大反対ですね。Cのenum的にって、Cで開発しているわけではないの
> ですから。
>
> > final class Sex { // like enum Sex { NOT_SPECIFIED, MALE, FEMAIL };
> > int sex;
> > public static final Sex NOT_SPECIFIED = new Sex(0);
> > public static final Sex MALE = new Sex(1);
> > public static final Sex FEMALE = new Sex(2);
> > private Sex(int sex) { // !! private !!
> > this.sex = sex;
> > }
> > }
> >
> > class Person {
> > String name;
> > private Sex sex = Sex.NOT_SPECIFIED;
> > // ...
> > }
> >
> > でも,今回は,複雑すぎる,ということでシンプルに String にし
> > ました.
>
> Sexインタフェースを実装したAbstractSexクラスがあって、それを
> 継承した、Maleクラス、Femaleクラス、NotSpecifiedクラスがあるの
> かな…と思いました。
> (そこまでやる必要ないのかもしれませんが)
もし、Maleクラス、Femaleクラスに明確な役割がなければ
平鍋さんのインスタンスで対処する方に賛成です。
IsSex見たいなメソッドが必要で、クラスを作成することで
if文がなくなるようなら、クラスを作成する方が良いですね。
#ヌルオブジェクトのリファクタリングの応用です。
最近、ヌルオブジェクトを導入して、コードがシンプルになって
このリファクタリングに少しはまっています。