"literal".equals(s) のまとめ

3つ流派があって

  1. ぬるぽが飛ぶのが嫌だから、nullでないことが保証されるリテラルを先に書く
  2. ぬるぽが飛ばないとエラーを隠すので、ぬるぽを発生させる可能性のある s を先に書く
  3. equalsは同値比較演算で交換可能のはずなのに、順序を変えると動作が違うのは気持ち悪い

な感じ。おそらく見た目がどうとかは実はどうでもいい。

要は、交換可能で1と2を明示的にサポートしてやればよいので、

// null をゆるす
static boolean equals(Object o1, Object o2);

// null をゆるさない
static boolean equalsObject(Object o1, Object o2);

みたいなメソッドを用意してやるか、HaskellのMaybeみたいなものを全力で使ってnullを出現させないとか、その辺りで落ち着けばいいんじゃないかなと。

面倒ならば、どれかルールを決め打ちして統一して運用すればよいとおもいます。