(1)  equals(Object)メソッド  2001/02/06 
 

Javaの場合、aとbのオブジェクトが同じ値かどうかをequals(Object)tってメソッドで判定するよね。
a.equals (b)とかb.equals (a)とか。
けど、これって、すげぇ、めんどくさい。
だって、aかb、または両方がnullだったらどうすんのさ。
nullについては、いろいろ考え方があるだろうけど、一般にアプリケーション処理をする中で、nullっていうのも立派な「値」だと思うわけよ。「なんもない」という状態を表す特殊な値。で、「なんもない」同士も、「同じ値」ってみなしたいこともあるわけだけど、equalsメソッドは、そゆときめんどい。
a == nullであれば、a.equals (b)という式は当然、NullPointerExceptionをthrowしてくれちゃう。自分でその辺を何とかするコードを書かねばならんね。

ちょっと視点を変えてみよう。a.equals (b)という表現は、aというオブジェクト(を指す変数)を主体として、それがbというオブジェクトと一致するかどうかを判定するというa,bについて非対称な表現である。それがどーしたって言われると、、、(^^ゞ

ま、それはいーとして、結局のところ、equalsを使う場合、常に、nullとの戦いが付き纏うので、非常にうざい。
ってことで、おいらは

equals (Object a, Object b)

みたいなメソッドを作っている。こいつは、aとbを対照的に扱い、お互いにnullであれば、同値とみなすようにしている。 要は

if (a == null && b == null) return true;
if (a == null || b == null) return false;
return a.equals (b);

ってことをやるわけだ。さて、この場合、equals (Object, Object)というメソッドはどこに定義されるべきなのであろう。意味的にequalsの主体も対象もaとb両方である。オブジェクト指向的には処理の主体あるいは対象となるクラスがそのメソッドを持つように定義すると思うが、こういうものはどこに定義すりゃいーの?そもそも、こゆのは邪道?、、、けど、楽だから許せ。

(2)  Pragma: no-cache(Javaな話ぢゃないけど(-.-)y-~~~ )  2001/10/31 
 

サーバ側でHTTPヘッダの"Pragma"に対して"no-cache"を指定すれば、ブラウザは、そのコンテンツをキャッシュしなくなるよね。これって、それだけの意味でしょ。。。

、、、にも関わらず、某IEは、、、

httpsでアクセスするContent-typeがtext/html以外のオブジェクトがPragma: no-cacheをヘッダにセットしていると、「Internet Explorerでは、www.xxx..xxx - binaryをダウンロードできません。このインターネットのサイトを開くことができませんでした。要求されたサイトが使用できないか、または見つけることができません。後でやり直してください。」なーんていって、ダウンロードに失敗しちゃうんだよね。httpでは問題ないのに。

これって、バグだよねぇ、、、多分。とあるサイトでcsvをダウンロードするサーブレットを作ったのだが、なぜかネスケでは問題ないのにIEではエラーという状況の原因が分からずずぃーっと困っていたんだけど、結局、こんなところが原因だったのね、、、

(3)  JavaMailにおける日本語送信  2004/11/28 
 

最近、とあるプロジェクトでのシステムで、送信されるメール本文のおけつに怪しげな文字"w)"がくっつく現象がはっせいした。正確に言うと、「くっつく」のではなく、特定のメーラ(Outlook Express)で表示すると、"w)"がくっついてくるという状態。

SMTPレベルのプロトコルログを見てみたところ、どうも本文最後が日本語全角文字で終了している場合に、JavaMailではShift out ([ESC] + "(B")を付加しない形態で送信されることが原因っぽい。(それでも、Becky!とか正常に表示できちゃうんだけど^^;)

全ての場合に怪しげな文字"w)"がつくわけではなく、"ー"などの特定の文字で終わっている場合だけ、その現象が発生するため、長いこと使っているが、初めてのご対面となった。

ちなみに、"ー".getBytes ("IS0-2022-JP")では正しくShift outコードが付加されるので、JavaMailが送信する際の処理が怪しいっぽい。