- 泛型可以解決數(shù)據(jù)類型的安全問(wèn)題糙臼,它的主要原理是:在類聲明的時(shí)候通過(guò)一個(gè)標(biāo)識(shí)表示類中某個(gè)屬性的類型或者是某個(gè)方法的返回值及參數(shù)類型群叶。就像下面這個(gè)類:
class Person<K,V>{
private K key ;
private V value ;
//省略set和get ...
};
好處是在聲明對(duì)象時(shí)蒋譬,可以指定K和V的類型属愤,表現(xiàn)得更為靈活:
Person<String,Integer> t = null ;
t = new Person<String,Integer>() ;
t.setKey("劉德華") ;
t.setValue(40) ;
如果在聲明類對(duì)象的時(shí)候号胚,沒有指定類型籽慢,系統(tǒng)會(huì)會(huì)自動(dòng)將類中的“T”都換成“Object”,編譯程序的時(shí)候會(huì)發(fā)出警告猫胁。
- 定義一個(gè)網(wǎng)絡(luò)返回基礎(chǔ)類BaseEntity箱亿,里面的data我們不知道會(huì)傳回來(lái)什么類型的數(shù)據(jù),有可能只包含一個(gè)token弃秆,或是一個(gè)array届惋,所以我們將其定義為T,讓使用它的人去定義data的類型菠赚,代碼如下:
/**
* 網(wǎng)絡(luò)返回基礎(chǔ)類
* @param <T>
*/
public class BaseEntity<T> {
private int errcode;
private String errmsg;
private T data;
//省略set和get ...
}
public class GoodsItem {
private String productName;
//省略set和get ...
有些數(shù)據(jù)是列表結(jié)構(gòu)脑豹,因此我們還需要定義一個(gè)ListEntity:
/**
* 網(wǎng)絡(luò)返回列表基礎(chǔ)類
* @param <T>
*/
public class ListEntity<T> {
private String total;
private String hasnext;
private String count;
private String page;
private String totalPages;
private List<T> list;
//省略set和get ...
}
這樣,我們就把一些通用的Entity代碼集合了起來(lái)衡查,后面要解析訂單列表瘩欺、客戶列表,我們只需要定義一個(gè)OrderItem和CustomerItem的實(shí)體類拌牲,這極大地減少了冗余的代碼: