- - PR -
文字列をequalsで判定する時
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-02-18 12:07
僕はむしろ、「null.equals("Hoge")」という記述が許されるほうに一票を! (「123.toString()」などと同じくですが) 「"Hoge"がオブジェクトだ!」と声高に言えるぐらいの時代 (リソースなどインフラ面で)が来ているなら、 もう、「Stringだけ特別扱いね」というのはやめて、 「null」だって、「123」だって、オブジェクトとして扱いたいです。 # むろん。「123」とか「null」とか直接コードに書くわけではないですが。。。 当時はそれでも先進的だったのですけど。 (文化が違うのでSmalltalkなら。。っていうのは無しで ![]() | ||||||||||||
|
投稿日時: 2008-02-18 12:31
Java だと null という状態は、変数が持つものであり、インスタンスが持つものではありませんが、たとえば、↓こういう世界はあっても良いかもしれませんね。
変数が null だったときの挙動を、メソッドで定義できるというものです。こういう言語だとなにか破綻しますかね?あるいはすでにそういう言語がある? | ||||||||||||
|
投稿日時: 2008-02-18 12:49
無駄無駄無駄。
いくらやっても、どうせ、お前ら「真のヌル」を欲しがるだろ。 インスタンスメソッドを書くときに自身が null であるかもしれないという可能性を考慮しないといけないなんて! ありえません。Java を汚さないでください。 | ||||||||||||
|
投稿日時: 2008-02-18 13:12
nullは型を持たないから
と書かざるを得ないですが、うれしいですか? 私もthisがnullである可能性を考慮しなくてはならないとしたら それだけで面倒事が増えると考えてしまうなぁ。 衒学的な話題としてはnullのメソッドというのは面白いとは思いますけども。 | ||||||||||||
|
投稿日時: 2008-02-18 13:21
僕は、 「class Null extends Object」 のイメージで書いたので、 「null.equals("Hoge")」のときの「equals」はNullクラスのメソッドの つもりでした。 ので、キャストは要らないかと。。。 でも、いろいろ、詳細を突かれたら、そこまで考えてませんから ![]() | ||||||||||||
|
投稿日時: 2008-02-18 13:32
ちなみに、
こうしたら、どうなります?(自信なし)
これもできればいいなという程度のものです。
というのもありということになりますね。 いろいろ、問題ありそうですね。。。 細かいことは僕に聞かないで下さい。。。 ![]() | ||||||||||||
|
投稿日時: 2008-02-18 13:58
equalsはObjectに定義されるメソッドですから、
もしもnullがObject型なのだとすればequalsを呼べると考えるかもしれませんが、 nullは単なる無効な参照ですから、その実態によるポリモフィズムはできません。
そして、Object.equals()のデフォルトの実装では==による参照比較ですから
と等価ということになる。 変数に格納した場合に、変数の型の該当メソッドを呼べばよいではないか という意見もあるかもしれませんが
というように、代入によって動きが変わることになる。 もっとも、nullとのequalsなんて結果としての挙動は一緒でしょうから あまり問題にならないかもしれませんが。 null値がnullオブジェクトパターンとなっていて、 equalsなどのObjectに定義されるメソッド呼び出しぐらいは 行えるという言語仕様のプログラム言語というのはアリかもしれませんね。 | ||||||||||||
|
投稿日時: 2008-02-18 14:21
それって、本当ですか? Stringクラスは、Objectクラスのequalsメソッドをオーバーライドしていない ということですか!? |