javaBean中的get/set的命名規范


[轉]

最近的struts項目中遇到了這樣的問題: 我的action中全局變量明明有getset方法,而且是自動生成的,但是在使用的時候,總是說找不到這個屬性的getset方法,取不到從jsp傳來 的值, 原因如下:變量名為:hDeptment,在自動生成getset方法為:setHDeptment,getHDeptment。下面是解釋這個問題。

 

(1)JavaBean 類必須是一個公共類,並將其訪問屬性設置為 public  ,如: public class user{......}

(2)JavaBean 類必須有一個空的構造函數:類中必須有一個不帶參數的公用構造器

(3)一個javaBean類不應有公共實例變量,類變量都為private  ,如: private int id;
(4)屬性應該通過一組存取方法(getXxx 和 setXxx)來訪問,一般是IDE(Eclipse、JBuilder) 為屬性生成getter/setter 方法

 

 

一般JavaBean屬性以小寫字母開頭,駝峰命名格式,相應的 getter/setter 方法是 get/set 接上首字母大寫的屬性名。例如:屬性名為userName,其對應的getter/setter 方法是 getUserName/setUserName。

但是,還有一些特殊情況:

1、如果屬性名的第二個字母大寫,那么該屬性名直接用作 getter/setter 方法中 get/set 的后部分,就是說大小寫不變。例如屬性名為uName,方法是getuName/setuName。

2、如果前兩個字母是大寫(一般的專有名詞和縮略詞都會大寫),也是屬性名直接用作 getter/setter 方法中 get/set 的后部分。例如屬性名為URL,方法是getURL/setURL。

3、如果首字母大寫,也是屬性名直接用作 getter/setter 方法中 get/set 的后部分。例如屬性名為Name,方法是getName/setName,這種是最糟糕的情況,會找不到屬性出錯,因為默認的屬性名是name。

所以在action的全局變量和JavaBean命名時應該注意符合以上命名規范。

 

附下表,看看吧:



————————————————————————————————————————————————————————

屬性名/類型                    |                       getter 方法              |                    setter 方法  

————————————|——————————————————|——————————————————————————
xcoordinate/Double     | public Double getXcoordinate()     | public void setXcoordinate(Double newValue)

————————————|——————————————————|——————————————————————————
xCoordinate/Double    | public Double getxCoordinate()     |public void setxCoordinate(Double newValue)

————————————|——————————————————|——————————————————————————
XCoordinate/Double    |public Double getXCoordinate()     | public void setXCoordinate(Double newValue)

————————————|——————————————————|——————————————————————————
Xcoordinate/Double     |不允許                                             |    不允許

————————————|——————————————————|——————————————————————————
分割線 ==========================================================================================

遇到一個異常:

javax.servlet.jsp.el.ELException: Unable to find a value for “isActive” in object of class “com.mycompany.domain.User” using operator “.”

使用“.”運算符,在User類的對象中,找不到isActive的值。

錯誤之處是,在JSP頁面中我使用了:

          
1
${user.isActive}

 

檢查后發現沒有寫屬性isActive的getter方法,那好,利用IntelliJ IDEA的自動生成代碼功能,補上:

            1
            2
            3
            
public boolean isActive() {
            return isActive;
            }

運行,還是不對,問Erik,他說JavaBean命名規范里面規定,對於primitive和自定義類類型的屬性property(小 寫),getter和setter方法就是getProperty和setProperty(第一個字母變大寫,前面再加get或set)。而對於類型為 boolean的屬性,getter方法還可以寫為isProperty(getProperty仍然可用),而且,如果屬性的前兩個字母是is(兩個小 寫),則getter與property完全同名(比如上面屬性isActive的getter就是isActive())。

如果有個叫isIsActive的boolean類型屬性,它的getter呢?答案還是isIsActive()。

所以,無論屬性名是isActive還是active,getter只能是isActive()或者getActive(),JSP里只能用${user.active}來訪問(注意大小寫)。

最好的辦法是不要以“is”作為開頭來命名boolean類型的屬性,以免混淆。

分割線====================================================================================

總之,javaBean中,要設置或獲取某個property的值,就需要相應的get和set方法,對於boolean型,你可以用get/set方式來處理boolean,可以用is來代替get;

再者,一定要注意javaBean中的命名規范!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM