2011/01/07(金)この会社辞めようと思ったソースコード

2011/01/07 25:02

今のプロジェクトでは基盤の置き換えに伴う改修作業をやっているわけですが、テスト中にものすごい勢いでClassCastExceptionがthrowされて困り果ててしまいました。たとえば以下のような場所。

if (((Boolean)map.get("xxx")).booleanValue()) {
    :
    :

"xxx"はチェックボックスのIDで、旧基盤ではこのソースが問題なく動いていたのですが、新基盤に乗せ換えるとちゃんと動いてくれません。仕方がないので基盤チームに問い合わせたところ、新基盤ではチェックボックスの値は"true"、"false"という文字列が返ってくる仕様だそうです。

……もうやだこのプロジェクト。

とはいえ、動くように直さないといけませんから、仕方なくこんな美しくない形に書き換えました。50箇所も。

if (Boolean.parseBoolean((String)map.get("xxx"))) {
    :
    :

これで一安心……とは行かず、やっぱりClassCastExceptionがthrowされます。ただ、今回は毎回発生するわけではないようです。

泣きそうになりながらデバッグして追ってみたところ、どういう仕組みかは分かりませんが、ときどきBooleanクラスのインスタンスが返ってくるようです。どんなコードを書けばそんなすげぇ動きをさせることができるんだよw

……もうやだこのプロジェクト。

とはいえ、動くように直さないといけませんから、仕方なくこんな美しくない形に書き換えました。50箇所も。

if (Boolean.parseBoolean(map.get("xxx").toString())) {
    :
    :

StringのtoString()を呼んでどうするんだって話ですが、でもときどきBooleanなんだから仕方ないじゃない!

……もうやだこのプロジェクト。