Java booleanの変数名

JavaBeansで通常はgetXXXX()/setXXXX()でプロパティを取得するけど、booleanの場合にはisXXXX()/setXXXX()で取得する。そのため、isOpenedという変数名?プロパティ名?にすると、それを取得するメソッド名がisIsOpened()になってしまう?JavaBeansのプロパティ名と変数名とが一致していなくてもいいのかもしれないけど。
…と思って、試しにEclipseで「boolean isOpened」にsetter/getterを自動生成したら、以下のようになった。なかなか、かしこい。この場合、プロパティ名としてはopenedになるのかな?

public class TestBean {
	private boolean isOpened;

	public void setOpened(boolean isOpened) {
		this.isOpened = isOpened;
	}

	public boolean isOpened() {
		return isOpened;
	}

}

Strutsを使っていた時の失敗例

それに関連して、昔の失敗を思い出した。
Struts タグで

<logic:empty property="XXX">XXX is empty.</logic:empty>

とやっても、どうしても空と判定されなかった。絶対にnullのはずなのに。試しにXXXをするとfalseと出てくる。デバッグしてみたら、Boolean型になっている。何でかと思ったら、XXX に対して isXXX() というメソッドが定義されていたからだった。XXXに対して、

  • getXXX()
  • setXXX()
  • isXXX()

と3つのメソッドを定義してしまっていた。というわけで意図せずboolean型のプロパティになってしまっていた。
これは半日、悩んでしまった。