【初心者】Java質問・相談スレッド73【大歓迎】
■ このスレッドは過去ログ倉庫に格納されています
0558デフォルトの名無しさん
2005/10/20(木) 12:14:57> >>513
> genericsと同じくらい要求はあるが、genericsを遥かに超えるほど
> 反対もある。
> 特別なスーパークラスの派生クラスだけでも演算子オーバーラ
> イドできるといいんだけどな。実際Stringは特別扱いしてるんだし
> Integerとか使うとコードが汚くなるorz
そんな要求はないと思う、というより、
そんな要求もメリットもない。もしそんなものが実装されるとしたら
C#とは全く異なる方法で実装されるだろう。
なぜなら、==とequals()とははっきり区別しなければならないからだ。
==と使って同値判定したい場合とequals()を使って同値判定したい場合と、
複数の要求に応えなければならない場面が出てくる。
==はより厳しく判定し、equals()は限定的な緩めな同値判定するときに使う。
無闇に演算子自動オーバライドされると困った事態に陥る。
==の性質がクラスによって変わってしまうことは混乱を招き考え方が
がらりとかわり、煩雑化し、メンテナンス性悪影響を及ぼすことにつながるからだ。
equlas()はクラスによって性質がかわっても==は一切変わらず
オブジェクトがちょっとでも異なればfalseとなるようにしなければならない。
それによってメンテナンス性は保たれ、バグ増大の原因を生みにくくする効果がある。
C#のような、下手な演算子オーバライドはバグの温床となる。
■ このスレッドは過去ログ倉庫に格納されています