まぁ、いつもの話なんだけど。Java だと他のクラスを継承することができて、
* 継承したメソッドをちょっと修正
というのが可能。@Override とかいうannotationで、ちゃんと上書きしているかどうかを調べられます。
なのだが、
* まず、元のメソッドを全部コピペって、それを修正
ってのがあるらしく。だから、それやらずに、
* 元のメソッドを呼び出せばよいだろ
ってことですね。同じコードを二度書いたら警告が出る IDE ってないのか?
なのだが、同じ通信路を圧縮ありなしで選択という場合で、
* 圧縮なしを継承して圧縮ありを作る
というのをやってもらったんですが、
* 通信路は一つなのにインスタンスは二つ
というのをやられてしまって。それは、動作がおかしくなるな。受信スレッド二つはダメだろ?
というわけで、そういう時には、継承ではなくて移譲を使う方が良い。つまり、
* ちょっと変更してから、元のインスタンスのメソッドを呼び出す
わけですね。これだと、元のインスタンスの動作を妨害しないのが良い。初期化時に元のインスタンスを渡してやる必要がありますが。
移譲の方がコードの依存性を下げられると言われているんですが、残念ながら Java には移譲に関する言語機能的なサポートはない。なので、
void hoge() { deleget.hoge(); }
みたいなのをたくさん書く羽目に。継承だと、こういうのは書かなくてすむのだが...
なんか、良い方法ないのかな。
No comments:
Post a Comment