読者です 読者をやめる 読者になる 読者になる

log

日記です

にゃー

Java
if(obj instanceof HogeHoge) {
sysout("aa");
}

ひっさびさにJava書いたら楽しいっすね!
Beanのリストをソートするクラス書いた。

void TakuanUtils#sort(List<OyaBean> beans>);

comparatorさんを実装して。Beanの項目1,項目2、項目3でソートする感じ。
ズバリ下記を参考にしました

http://text4hide.blog14.fc2.com/blog-entry-7.html

にゃー

OyaBeanってゆーInterfaceがいて
TakuanBean implements OyaBean
HogeBean implements OyaBean
FooBean implements OyaBean
BarBean implements OyaBean
がいる。
OyaBeanを引数で受け取って、instanceofで比較して、オブジェクトによって使用するComparatorを変えた。

class TakuanUtils {
  void sort(List<OyaBean> beans) {
    if(beans.get(0) instanceof TakuanBean) {
      Collections.sort(beans, new TakuanBeanComparator);
    } else if (beans.get(0) instanceof HogeBean) {
      Collections.sort(beans, new HogeBeanComparator);
    }
  }
}

あ、本当はTakuanUtils#getComparatorInstance(Object obj);でComparatorをインスタンスしていた気もする…。そうだこうだったや。

void sort(List<OyaBean> beans) {
  Collections.sort(beans, getComparatorInstance(beans.get(0))
}

getComparatorInstanceで生成するComparatorをinstanceofで振り分ける感じ。
なんかbeans.get(0)でObjectを渡しているのがセンスが無い気がする。
Class情報だけを渡せばいいのでは?
まーいーや
OyaBeanでInterfaceきらないで、そんままObjectで受け取ってinstanceofでもいい気がする〜

臭い部分はなくならない

instanceofで、オブジェクトによって処理を振り分けているので、どんなオブジェクトでもかかってこいやー(ただし対応しているものだけ、していないのはthrow new HogeException)
でもでもでもー
Classの内部ではinstanceofとかで処理を振り分けているので、インターフェース的にはすっきりしているけど、内部では臭いことしている。
外に見えないから気持ちいけど。
オーバーロード作って、異なるシグニチャメソッドたくさん作るのも気持ち悪いし、
引数でどのComparatorを使うか文字列で渡すのもなんか気持ち悪いし、
Comparatorのインスタンスを渡すのも…まあありだけどなんか処理の局所化ができていない感じ。
呼ぶ側はそんなの意識しないで呼んで欲しい。
と言うことでこうやってみたわー
フィードバック絶賛大募集中

オーバーロード使うなら

TakuanUtils#sort(List beans);
TakuanUtils#sort(List beans);
TakuanUtils#sort(List beans);
一応ポリモーフィズムできているよね!ありだと思うよ!
でも重複するコードを書きたくないんだ( ー`дー´)キリッ
でも結局書いちゃうんだ(´・ω・`)
なんつーか、みんなプログラミングプロすぎ!
あんな馬鹿でかいコードよく書けるな…。

うひょひょー

作業しながらヤル気しない時に既存コードをhogehogeと読みあさって、これで間違いないな( ̄ー ̄)ニヤリ と見切りをつけて、実装はマッハのスピード2時間以内?
でもライン数400ぐらいいっちゃった…。
# comparatorクラスが11個ぐらい、Beanが11人いるから…。
Comparatorをいちいち一つづつclass宣言してしまったからなぁ…
全部匿名クラスにして、適当にFactoryメソッド作るのも考えたけど…なんかいんちき臭い。
hoge.comparator配下に沢山class並べても良かったけど。。
なんか全部インナークラスにしちゃった
何か言われたら、パッケージ作ってそこに書き出そう…。
まとめられるものもあったけど…。まぁ少しぐらい冗長な方が今後のメンテの時にも遊びがあって対応しやすい、というプラス思考に考える。やりすぎた重複の排除はメンテの時に困る気がする。気がするだけだけど…。それは重複の排除のやり方が悪いんじゃないですかと言われたら、確かにそうですねという。そうだな、それはそれでやり方がまずい。
最近はオブ脳になれてきている気がする!
おりゃああああああ!!!!!とマックススピードでコーディングするのが好き。
その後整理整頓、hogehoge、例外処理、その作業めんどいけども…。
なので、例外処理や設定ファイル読み出しとかも自分の中でパターン作っておきたい…。
一からやるの面倒臭すぎる!あれ昔やったからあれパクる!ぐらいの気持ちで組立上げたい!
マッハコーディングするネタ持っておきたいっすよね、インナークラスとか、Eclipseでアクセッサーの自動生成とか、(やったこと実は無いけど)インターフェースの抽出とか。#あんまりインターフェース切らないから使わないのかな。
外出しするのは後で、とりま動かすためにバシバシ書けるネタを…。かつ外出しするときに困らないような。