このメソッドの署名は有効ですか?'public Boolean isBikeTyreFlat()'は有効なJavaBeansメソッドのシグネチャですか?
public Boolean isBikeTyreFlat(){}
ここではプリミティブではなくオブジェクトを返そうとしています。
おかげ:)のJavaBeansで
このメソッドの署名は有効ですか?'public Boolean isBikeTyreFlat()'は有効なJavaBeansメソッドのシグネチャですか?
public Boolean isBikeTyreFlat(){}
ここではプリミティブではなくオブジェクトを返そうとしています。
おかげ:)のJavaBeansで
、boolean
ためのゲッターメソッドがgetXXX()
又はisXXX()
ことができます。 Boolean
はプリミティブ型ではないため、getXXX()
が必要です。 isXXX()
はブール型プリミティブ型(thanks @Kemoda)の場合のみです。
厳密なJavaBeansでは、これは有効な名前です(@TheEliteGentlemanの回答を参照)。
しかし、あなたはこのような何かをやっていないことを確認してください。
public class BikeTyre {
private boolean flat;
public Boolean isBikeTyreFlat() {
return flat;
}
}
これは推奨されません、あなたのフィールドの名前は、メソッド名と一致しないため。いくつかのフレームワークでは、Java Beanの内部フィールドとgetter/setterの両方にアノテーションを追加できます。不一致がこれらのフレームワークを混乱させる可能性があります。フィールドにクラス名を追加することは悪い習慣であることに注意してください。あなたの方法はちょうどisFlat()
でなければなりません。もちろん
が、これは完全に有効です:
public class Unicycle {
private boolean bikeTyreFlat;
public Boolean isBikeTyreFlat() {
return bikeTyreFlat;
}
}
しかし、その後、再び、あなたは本当に一輪車をモデル化していますか? ;-)
私はthis answerに同意しなければなりません。私はこの同じ質問をして、簡単なテストを書いた。メインクラスを実行した結果がある
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());
}
}
}
:
package example;
public class FooBean {
private Boolean published;
public void setPublished(Boolean published) {
this.published = published;
}
public Boolean isPublished() {
return published;
}
}
などに見えるメインクラス:
descriptor: [email protected]
descriptor.getName(): class
descriptor.getReadMethod(): public final native java.lang.Class java.lang.Object.getClass()
descriptor: [email protected]
descriptor.getName(): published
descriptor.getReadMethod(): null
私が変更した場合としてJavaBeansを考えると
FooBean.java
は次のようになります。
package example;
public class FooBean {
private boolean published;
public void setPublished(boolean published) {
this.published = published;
}
public boolean isPublished() {
return published;
}
}
は、次に結果の出力は次のようになります。これは、それが有効なJavaBeansの署名をするために、型がプリミティブブール値を宣言されなければならないことを私に伝えます
descriptor: [email protected]
descriptor.getName(): class
descriptor.getReadMethod(): public final native java.lang.Class java.lang.Object.getClass()
descriptor: [email protected]
descriptor.getName(): published
descriptor.getReadMethod(): public boolean example.FooBean.isPublished()
。
編集 JavaBeansのがそれを認識するためにisXxx()の単なる宣言された戻り値の型は、メソッドがブールしなければならないことが表示されますさらにテスト時に :
package example;
public class FooBean {
private Boolean published;
public void setPublished(Boolean published) {
this.published = published;
}
public boolean isPublished() {
return published;
}
}
結果:
descriptor: [email protected]
descriptor.getName(): class
descriptor.getReadMethod(): public final native java.lang.Class java.lang.Object.getClass()
descriptor: [email protected]
descriptor.getName(): published
descriptor.getReadMethod(): public boolean example.FooBean.isPublished()
あなたの '編集 'セクションは、「受け入れられた答えに同意しなければならない」という最初のステートメントと矛盾しています。 :-) –
@BuhakeSindi私はそれが私が参照していた実際の答えを参照するように更新しました:) – FGreg
なぜあなたのコードでこれを試してみませんか? – RanRag
非常に有効です。 –
申し訳ありませんが...これはうまくいくはずですが、javabeanの命名基準に対して有効ですか? – Continuity8