web-dev-qa-db-ja.com

ブール値のゲッターメソッドの有効なJavaBeans名

私はほとんどの変数名がisBlue()のように "is"で動作することを知っていますが、hasProperty()のように "has"も有効な接頭辞ですか?

57
Robert

JavaBeans仕様 セクション8.3.2によると、

ブールプロパティ
さらに、ブールプロパティの場合、ゲッターメソッドがパターンに一致することを許可します。

public boolean is<PropertyName>();

この「isPropertyName」メソッドは、「get<PropertyName>」メソッドの代わりに提供される場合と、「get<PropertyName>」メソッドに追加して提供される場合があります。どちらの場合も、ブールプロパティにis<PropertyName>メソッドが存在する場合、 "is<PropertyName>"メソッドを使用してプロパティ値を読み取ります。ブールプロパティの例は次のとおりです。

public boolean isMarsupial(); public void setMarsupial(boolean m);

言い換えると、それ以降に何かが変更されない限り、hasは有効な接頭辞ではありません。

someツールとライブラリがそのようなプロパティを認識できる可能性がありますが、それに依存するのは良い考えではありません。

71
Jon Skeet

Jon Skeet氏は、仕様によると有効ではないと指摘しました。また、canXshouldXなどは無効です。どちらかと言えば残念です。以下は、特定のプロパティに有効なゲッターがあるかどうかを確認する方法です。

BeanInfo info = Introspector.getBeanInfo(Item.class);
Item itm = new Item();
for (PropertyDescriptor pd : info.getPropertyDescriptors()) {
    System.out.println(pd.getName() + " : " + pd.getReadMethod());
}

クラスItemは、fooプロパティとゲッターを持つjavabeanである必要があります。 readメソッドがnullの場合、それはjavabeans仕様に従って定義された有効なゲッターがないことを意味します。

9
Bozho

これはやや主観的ですが、そうです、「has」はブール型プロパティの完全に有効な接頭辞です。

編集質問のとおり、javabeans仕様については触れられていないため、私の回答では質問のその側面については触れていません。したがって、上記の答え。

4
Ryan Guill