Android開發(fā)須知(2):Android中的entityBean

復雜的東西都是從簡單的開始,如果想要打造一個極致精美的房間,那么你得造好每一塊磚。想要打造一個漂亮的程序,就要做一個結(jié)構(gòu)清晰目錄(框架),并將把每一個種類(view、entity、adapter)按照特定的規(guī)則進行書寫。

剛開始,我們就先從比較簡單的entityBean開始。

從entity與JavaBean的區(qū)別開始

很多Java小白對這兩個概念很模糊,尤其是和我一樣自學雜七雜八的視頻來擴充自己知識庫的小伙伴,因為沒有統(tǒng)一的規(guī)范所以就不是很清楚這一塊。

entity:實體類,包裝實體。沒有業(yè)務邏輯。
JavaBean:按照一定的java規(guī)范創(chuàng)建的類,可以有自己的邏輯。

大部分情況下,javabean與entity長的差不多的。但是追究根源的話,兩個還是不一樣的。

Android中的entityBean與傳統(tǒng)的JavaBean

不知道有多少和我一樣從web轉(zhuǎn)到Android的小伙伴。我們傳統(tǒng)的JavaBean是這樣寫的

public class UserBean implements Serializable{
    private static final long serialVersionUID= 123456;
    
    private String name;
    private int age;

    public UserBean() {
    }
    public UserBean(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "UserBean{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

嗯,咋們來盤點一下:
1.公共的無參構(gòu)+有參數(shù)造方法。2.類的聲明是非final類型。3.實現(xiàn)可序列化接口4.為屬性聲明訪問器:JavaBean中的屬性應該設置為private,所以為屬性提供getter/setter方法。

很標準有沒有?但是,在android中的bean類是這樣寫的

public class UserBean{
    public String name;
    public int age;
    @Override
    public String toString() {
        return "UserBean{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

在Android序列化不推薦用get-set方法,因為這樣性能很低,而內(nèi)存是有限的。Android不像web哪樣對其他框架依賴那么緊密,自然也不用嚴格按照JavaBean那樣寫。所以實體屬性定義成public。

Bean類除了這些之外,我們還有知道幾個細節(jié)
1.繼承Serializable接口我們需要寫定義serialVersionUID
Java的序列化機制是通過在運行時判斷類的serialVersionUID來驗證版本一致性的。
在進行反序列化時,JVM會把傳來的字節(jié)流中的serialVersionUID與本地相應實體(類)的serialVersionUID進行比較,如果相同就認為是一致的,可以進行反序列化,否則就會出現(xiàn)序列化版本不一致的異常[InvalidCastException]
在某些場合,希望類的不同版本對序列化兼容,因此需要確保類的不同版本具有相同的serialVersionUID;在某些場合,不希望類的不同版本對序列化兼容,因此需要確保類的不同版本具有不同的serialVersionUID。

2.面向接口編程
List<?> list= new ArrayList<?>是我們常見的寫法
這樣做有什么好處呢?比如說有個項目,開發(fā)某項目前期,用戶很少,系統(tǒng)都是單線程執(zhí)行,所以使用了ArrayList。但隨著業(yè)務與用戶的提升,開始牽扯到了多線程安全問題,我們只需要要改List<?> list= new Vector,其他的方法不用改變。但是如果你是ArrayList<?> list= new ArrayList<?>那你就慘了,所有用到ArrayList獨有的方法都得改得不償失。

3.泛型為String,則不用聲明。
并不是所有帶"<>"的我們都要聲明存儲對象的。這得從泛型的定義開始說起:
泛型的定義:在程序中我們將一個對象放入集合中,但是集合不會記住對象的類型,當我們在次使用對象的時候,對象變?yōu)镺bject類型,而程序中還是原來的類型,我們必須要自己轉(zhuǎn)換其類型,為了解決這個問題,則提出泛型。
由此可知,顯式類型參數(shù)字符串可以完全不使用泛型

4.內(nèi)部類使用static
靜態(tài)類和方法只屬于類本身,并不屬于該類的對象。如果想要創(chuàng)建一個內(nèi)部類可以直接進行創(chuàng)建,而不先創(chuàng)建一個外部類對象,

一個小小的Bean類,也能挖出來這么多坑。當然,說這個主要是為了我下來將MVP架構(gòu)模式,做個小鋪墊,不知道對您是否有啟發(fā)呢?我們改天再聊。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容