原創 如何在Parcelable中使用泛型

2022-01-11 03:16:05 字數 1525 閱讀 2760

實體類在實現parcelable介面時,除了要實現它的幾個方法之外,還另外要定義乙個靜態常量creator,如下例所示:

1

public

static

class productmodel implements

parcelable

1415

@override

16public

void writetoparcel(parcel dest, int

flags)

2526

public

productmodel()

2829

protected

productmodel(parcel in)

3839

public

static

final creatorcreator = new creator()

4344

public productmodel newarray(int

size)

47 };

creator在這裡成為了乙個約定,而沒有放到介面定義裡面,個人感覺這樣封裝得不是很好,不知道是不是實在沒有更好的解決辦法才弄成這樣的?

假如在類裡要使用泛型,麻煩就來了,例如這樣

1

public

class pagedatamodelextends parcelable> extends

apidatamodel

這個data,就無法正常read(write倒是可以)。

正常的write方式是這樣的:

this.data = dest.createtypedarraylist(parcelable.creatorc)

那麼問題來了,你只有乙個泛型t,沒有具體型別,拿不到它的creator!creator只是乙個約定,而且是跟具體型別繫結的。

所以我前面說如果這個creator能通過某種方式定義下來,這裡或許就能拿到了,然而並沒有。

但是android系統你是改變不了的,我們仍然要解決問題。經過多番調查嘗試之後,終於找到了解決辦法:

pacel是可以讀取和寫入bundle物件的,而bundle物件又可以讀取和寫入parcelable,而且不需要creator(為啥parcel不能設計成這樣,坑爹呢。。)

那麼 我們把泛型資料用bundle包裝一下即可,下面是具體**,親測有效,總算解決這個問題了。

1

//write

2 bundle bundle = new

bundle();

3bundle.putparcelablearraylist(data_key, data);

4dest.writebundle(bundle);56

//read

7this.data = in.readbundle().getparcelablearraylist(data_key);

原創 如何在面試時選擇合適的測試人員?

原創 如何在面試時選擇合適的測試人員?1你最近3 5年的職業規劃是什麼?重點考察測試人員的職業發展方向是否與當前職位招聘相符?從其中可以側面看出來其員工穩定性。2乙個專案測試結束,有沒什麼經驗總結?如果有,具體是如何開展的?重點考察測試人員對自己能力提公升方面,有沒有提高總結的地方,從專案中吸取的經...

如何在stack overflow提問

寫這篇部落格的原因主要是在stackoverflow上面提了乙個不符合規範的問題,後來找到了stackoverflow的幫助,我翻譯總結了一下,如何提乙個高質量的問題.如何在stack overflow提問 第一步,先去搜尋論壇上是否已經有你提出過的問題,確保你的問題是和別的問題不一樣,沒有出現過。...

如何在 上安裝

安裝rstudio server 1 sudo apt get install gdebi core 如果出現依賴問題,可以使用sudo apt get f installwget 4 sudo gdebi rstudio server 0.98.490 amd64.deb 經過這四條命令呢,你的r...