<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    love fish大鵬一曰同風起,扶搖直上九萬里

    常用鏈接

    統(tǒng)計

    積分與排名

    friends

    link

    最新評論

    數(shù)據(jù)的合法性檢測(轉(zhuǎn))

    一般的數(shù)據(jù)類都應該有自己的數(shù)據(jù)合法性檢查,如一個Person類,它的年齡屬性是int型的,但是如果給它賦值10000則為不合法,一個人不可能活那么長時間。因此需要在創(chuàng)建該類的對象時必需對其進行合法性檢查,若構(gòu)造方法傳入的是非法數(shù)據(jù),則不讓其創(chuàng)建該對象,并拋出異常。也許大多數(shù)人認為只需要對構(gòu)造方法傳入的參數(shù)進行合法性檢查即可。如下所示:
    class ValidClass
    {
    ????????int ?dataValid1;
    ????????String dataValid2;

    ?????????public ValidClass(int i, String str)
    ?????????{
    ???????????????check(int i, String str);
    ???????????????dataValid1 = i;
    ???????????????dataValid2 = str;
    ?????????}

    ?????????void?check(int i, String str)
    ?????????{
    ????????????if(i >100 && i <= 0) throws new RuntimeException("message");
    ????????????if(str == "str") throws new RuntimeException("message");
    ?????????}

    ?????????void setDataValid1(int dataValid1)
    ?????????{
    ???????????????this.dataValid1 = dataValid1;
    ?????????}
    }
    實際上這種合法性并不可靠,這樣只是保證了在構(gòu)造方法中傳入的數(shù)據(jù)是合法的,但是不能保證程序員在使用該對象時能傳入合法的數(shù)據(jù)。如下程序代碼:
    ValidClass validClass = new ValidClass(2, "123");
    validClass.set(200);
    這樣使用的話,程序運行并不會報錯,但是實際上我們已經(jīng)傳入了非法數(shù)據(jù)到該對象中去了,因此為了避免出現(xiàn)程序員在使用的時候也犯這種錯誤,對數(shù)據(jù)的合法性檢查的正確方式應如下所示:
    class ValidClass

    ?????? {

    ????????????? int ?dataValid;

    ?????????????

    ????????????? protected checkDataValid()

    ????????????? {

    ???????????????????? check if dataValid valid

    ???????????????????? if (fail)

    ???????????????????? {???? throws new RZXDataException(this, “.needValidate=”

    +needValidate); }

    ????????????? }

    public ValidClass(int in)

    ????????????? {????

    setDataValid(in);????

    }

    ????????????? public setDataValid(int in)

    ????????????? {?????????????????????
    ?????????????????????checkNeedValidate();

    ???????????????????? dataValid = in;

    ????????????? }

    ?????? }

    在set方法中進行合法性檢查,然后在構(gòu)造方法中也調(diào)用set方法設(shè)置字段值,而不直接使用類中的字段。這樣做的好處很明顯:不僅保證了構(gòu)造方法中傳入的數(shù)據(jù)必須合法,而且可以保證程序在使用的過程中不能使用非法數(shù)據(jù),如果程序員使用了非法數(shù)據(jù),程序運行必然出錯,并且能夠很快的找到錯誤的根源所在。

    ?????????另外,有些程序員認為,有些數(shù)據(jù)類的對象全部來自于另一個數(shù)據(jù)對象,也就是說該類的構(gòu)造方法中的參數(shù)即另一個數(shù)據(jù)類對象,因此在該類中所有與被傳入對象類中有相同的合法性檢查的數(shù)據(jù)字段不需要再進行合法性檢查了。其實這種想法是錯誤的,問題與上面所說的一樣,你能保證傳入的數(shù)據(jù)是合法的,但不能保證使用者在調(diào)用你的set方法時能100%傳入合法數(shù)據(jù)。因此,程序員是不應該偷這個懶的。也許有人會說,他們的合法性檢查完全一樣,如果在該類中再寫的話就會出現(xiàn)大量的重復代碼了。能想到這里是對的,但是如果你有一定的經(jīng)驗,你就知道去建立一個專門保存合法性檢查方法的類,這樣你就可以在需要進行合法性檢查的時候就使用該類里面的方法,如果該類中沒有你所需要的方法,你就可以在里面加入你所需要的合法性檢查方法,再去使用它。這樣做會使得代碼非常的清晰。

    posted on 2006-12-19 13:06 liaojiyong 閱讀(278) 評論(0)  編輯  收藏 所屬分類: Java

    主站蜘蛛池模板: 夜夜春亚洲嫩草影院| 成年女人毛片免费视频| 精品亚洲视频在线观看| 欧洲亚洲综合一区二区三区 | 国产精品区免费视频| 国产hs免费高清在线观看| 亚洲1区2区3区精华液| 免费黄网在线观看| 精品国产亚洲一区二区三区在线观看 | 亚洲欧洲综合在线| 免费在线观看视频网站| 亚洲一级毛片免费看| 在线a级毛片免费视频| 亚洲精品久久久久无码AV片软件| 女人被免费视频网站| 亚洲Av无码国产一区二区 | 国产精品V亚洲精品V日韩精品 | 成人黄18免费视频| 色窝窝亚洲av网| 久久久久亚洲AV无码专区网站| 一级中文字幕乱码免费| 亚洲乱码国产一区三区| 2015日韩永久免费视频播放| 波多野结衣亚洲一级| 免费在线观看日韩| 东方aⅴ免费观看久久av| 亚洲综合免费视频| 日韩精品免费电影| 日本道免费精品一区二区| 亚洲无圣光一区二区| 国产成人免费网站在线观看| 久久久久免费视频| 亚洲成aⅴ人片在线影院八| 国产乱子影视频上线免费观看| 国产色爽免费无码视频| 久久久久精品国产亚洲AV无码| 免费va人成视频网站全| 国偷自产一区二区免费视频| 亚洲av无码一区二区三区天堂古代 | 国产亚洲中文日本不卡二区| 亚洲国产精品日韩|