2012-04-17 67 views
1

此方法簽名是否有效?'public Boolean isBikeTyreFlat()'是一個有效的JavaBeans方法簽名嗎?

public Boolean isBikeTyreFlat(){} 

請注意,我想在這裏返回一個對象而不是原始的。

謝謝:)

+0

爲什麼你不試試在你的代碼中。 – RanRag 2012-04-17 09:36:23

+0

非常有效。 – 2012-04-17 09:38:07

+0

對不起......我知道這會起作用,但它是否對javabean命名標準有效? – Continuity8 2012-04-17 09:38:24

回答

7

在JavaBeans的,用於boolean吸氣方法可以是getXXX()isXXX()。由於Boolean不是原始類型,因此需要getXXX()isXXX()僅適用於布爾基元類型(謝謝@Kemoda)。

請參閱section 8.3.2 of the JavaBeans Specification

+0

每propertydescriptor規範isXXX只適用於原始布爾值 – Kemoda 2013-09-02 07:12:45

+0

@Kemoda,不得不創建一個測試用例,你是對的。我相應地更新了我的問題。 – 2013-09-02 09:31:17

+0

是的,我知道它是因爲它最近咬我,我不得不將我的所有布爾getter重構爲我的應用程序的某些層中的「get」表單。 – Kemoda 2013-09-02 11:14:39

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。我有同樣的問題,並寫了一個快速測試。

鑑於JavaBean作爲:

package example; 

public class FooBean { 

    private Boolean published; 

    public void setPublished(Boolean published) { 
     this.published = published; 
    } 

    public Boolean isPublished() { 
     return published; 
    } 

} 

這看起來像一個主類:

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: [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 

如果我改變FooBean.java看起來像這樣:

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() 

這告訴我,它是一個有效的JavaBeans簽名,類型必須聲明一個原始的布爾值。

編輯 經過進一步的測試,似乎只是isXxx()的聲明的返回類型的方法必須是布爾值是JavaBean認識到它:

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

你的「編輯」部分與第一條陳述相矛盾,第一條陳述說:「我不同意接受的答案。」 :-) – 2014-08-25 21:56:47

+0

@BuhakeSindi我已經更新它來指代我指的實際答案:) – FGreg 2014-08-26 13:19:51

相關問題