復雜的東西都是從簡單的開始,如果想要打造一個極致精美的房間,那么你得造好每一塊磚。想要打造一個漂亮的程序,就要做一個結(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ā)呢?我們改天再聊。