このメソッド シグネチャは有効ですか?
public Boolean isBikeTyreFlat(){}
ここでは、プリミティブではなくオブジェクトを返そうとしていることに注意してください。
ありがとう :)
JavaBeans では、 の getter メソッドはboolean
またはgetXXX()
ですisXXX()
。はプリミティブ型ではないためBoolean
、 agetXXX()
が必要です。これisXXX()
は、ブールプリミティブ型専用です(@Kemodaに感謝します)。
JavaBeans 仕様のセクション 8.3.2 を参照してください。
私はこの答えに反対しなければなりません。これと同じ質問があり、簡単なテストを書きました。
JavaBean を次のように指定します。
package example;
public class FooBean {
private Boolean published;
public void setPublished(Boolean published) {
this.published = published;
}
public Boolean isPublished() {
return published;
}
}
そして、次のような Main クラス:
package example;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
BeanInfo beanInfo = null;
try {
beanInfo = Introspector.getBeanInfo(FooBean.class);
} catch (IntrospectionException e) {
e.printStackTrace();
}
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for(PropertyDescriptor descriptor : propertyDescriptors){
System.out.println("descriptor: " + descriptor);
System.out.println("descriptor.getName(): " + descriptor.getName());
System.out.println("descriptor.getReadMethod(): " + descriptor.getReadMethod());
}
}
}
メインクラスを実行した結果は次のとおりです。
descriptor: java.beans.PropertyDescriptor@1e746992
descriptor.getName(): class
descriptor.getReadMethod(): public final native java.lang.Class java.lang.Object.getClass()
descriptor: java.beans.PropertyDescriptor@c994fbad
descriptor.getName(): published
descriptor.getReadMethod(): null
次のように変更FooBean.java
した場合:
package example;
public class FooBean {
private boolean published;
public void setPublished(boolean published) {
this.published = published;
}
public boolean isPublished() {
return published;
}
}
結果の出力は次のとおりです。
descriptor: java.beans.PropertyDescriptor@18072768
descriptor.getName(): class
descriptor.getReadMethod(): public final native java.lang.Class java.lang.Object.getClass()
descriptor: java.beans.PropertyDescriptor@1e2ff4ad
descriptor.getName(): published
descriptor.getReadMethod(): public boolean example.FooBean.isPublished()
これは、それが有効な JavaBeans 署名であるためには、型がプリミティブのブール値として宣言されている必要があることを示しています。
編集 さらにテストすると、 isXxx() メソッドの宣言された戻り値の型だけが、JavaBeans が認識できるようにブール値でなければならないことがわかります。
package example;
public class FooBean {
private Boolean published;
public void setPublished(Boolean published) {
this.published = published;
}
public boolean isPublished() {
return published;
}
}
結果:
descriptor: java.beans.PropertyDescriptor@1e746992
descriptor.getName(): class
descriptor.getReadMethod(): public final native java.lang.Class java.lang.Object.getClass()
descriptor: java.beans.PropertyDescriptor@f96377e5
descriptor.getName(): published
descriptor.getReadMethod(): public boolean example.FooBean.isPublished()
厳密な JavaBeans では、これは有効な名前です (@TheEliteGentleman の回答を参照)。
ただし、次のようなことをしていないことを確認してください。
public class BikeTyre {
private boolean flat;
public Boolean isBikeTyreFlat() {
return flat;
}
}
フィールドの名前がメソッド名と一致しないため、これはお勧めできません。一部のフレームワークでは、Java Bean の内部フィールドとゲッター/セッターの両方に注釈を追加できます。この不一致は、これらのフレームワークを混乱させる可能性があります。また、クラス名をフィールドに追加するのは悪い習慣であることに注意してください。あなたの方法はちょうどあるはずisFlat()
です。
もちろん、これは完全に有効です。
public class Unicycle {
private boolean bikeTyreFlat;
public Boolean isBikeTyreFlat() {
return bikeTyreFlat;
}
}
繰り返しになりますが、あなたは本当に一輪車をモデル化していますか? ;-)