型をoptionalに変えてバグった
テストのないコードに変更を加えたら動かなくなった
あるある感があったのでメモ
javaは「型があるから安心」ではない
元のコードはこんな感じ
public class SampleEntity { LocalDate date; ... }
EntityがLocalDateを持ってる
これを仕様変更でOptional
public class SampleEntity { Optional<LocalDate> date; ... }
そうするとビルドエラーになるので、それを全部潰して完了!
っとなる予定が動かしてみると上手くいかない
よくよく調べてみると
このdateに対してequals()を呼んでる所があった
public class SampleEntity { LocalDate date; public boolean isSameDate(LocalDate now) { return this.date.equals(now);// ここでequals!! } }
あぁ... equals()の引数はObject型だから型チェックが効かない... だからdateをLocalDateからOptionalに変えてもビルドエラーにならない... つらい...
※テスト書けって言わないで
型チェック付きeqメソッドを作る
解決策としては型でしばれるequals相当のメソッドを作って
equalsメソッドの利用を禁止すればいい
static <T> boolean eq(T v1, T v2, Class<T> c) { return v1.equals(v2); }
呼び出し元
eq(this.date, now, LocalDate.class);
これで型変更時にビルドエラーになる
美しくはないけど守れる
テスト書けって言わないで
まとめ
テスト書きたくないがために堅牢なeqメソッドを作った
一応目的は果たせた
ちょっと汚いけど、、、まぁ。ね。