2012-04-17 8 views
1

このメソッドの署名は有効ですか?'public Boolean isBikeTyreFlat()'は有効なJavaBeansメソッドのシグネチャですか?

public Boolean isBikeTyreFlat(){} 

ここではプリミティブではなくオブジェクトを返そうとしています。

おかげ:)のJavaBeansで

+0

なぜあなたのコードでこれを試してみませんか? – RanRag

+0

非常に有効です。 –

+0

申し訳ありませんが...これはうまくいくはずですが、javabeanの命名基準に対して有効ですか? – Continuity8

答えて

7

booleanためのゲッターメソッドがgetXXX()又はisXXX()ことができます。 Booleanはプリミティブ型ではないため、getXXX()が必要です。 isXXX()はブール型プリミティブ型(thanks @Kemoda)の場合のみです。

section 8.3.2 of the JavaBeans Specificationを参照してください。

+0

は、プロパティ記述子isXXXは、プリミティブブール値 – Kemoda

+0

@ Kenodaに対してのみ動作します。テストケースを作成しなければなりません。私はそれに応じて私の質問を更新しました。 –

+0

はい、私は最近私をかむので、私は私のアプリケーションのいくつかのレイヤーで "get"フォームに私のすべてのブールゲッターをリファクタリングすることを強いられました。 – Kemoda

1

厳密な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; 
    } 
} 

しかし、その後、再び、あなたは本当に一輪車をモデル化していますか? ;-)

1

私は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() 
+0

あなたの '編集 'セクションは、「受け入れられた答えに同意しなければならない」という最初のステートメントと矛盾しています。 :-) –

+0

@BuhakeSindi私はそれが私が参照していた実際の答えを参照するように更新しました:) – FGreg