簡體   English   中英

我如何優雅地解決這種內部對象/內部類情況?

[英]How do I elegantly solve this inner-object/inner-class situation?

我有一個A類,它擴展了imageView,所以您有:

public class A extends imageView {...}

然后,我有了MetaClassA,它存儲A的元數據並在活動之間來回發送,因此您具有:

public class MetaClassA implement Parcelable{...}

使用MetaClassA的全部目的是收集和傳輸A類的數據,而無需實際發送A類本身,這會帶來問題並且有點笨。

現在,我遇到了一個兩難的困境:您看到我想使所有事情都盡可能高效和輕松地進行,我希望經常使用以下命令

public A a = new A();
i.putExtra("type" a.getType());

盡可能代替:

...
Type type = a.getType();
i.putExtra("type" type);

所以我的難題是,我可以將A類內部的MetaClassA作為嵌套類,或者BI可以簡單地將其用作A內部的變量/對象。

所以我的問題是:

  1. 我應該選擇哪個計划?

  2. 如果我要使用計划A,是否可以假設每次構造A類時都會構造嵌套類MetaClassA?

  3. 如果我要遵循計划B,那么如何保證每次構造類A時都會構造MetaClassA對象? 由於它擴展了imageView並且還沒有常規的構造函數?

提前謝謝你的幫助!

按命令:

  1. 這是基於觀點的,不應基於SO。 在任何一個類中,您都缺少Parcelable的要點-它正是您想要的接口-從您的類中創建一個Parcel。 它的全部要點是類本身知道如何制作自己的包裹-因此,您不必發送對象本身,但是對象知道如何創建消息(如果需要,可以用來構造相同的對象)。
  2. 否。需要實例化一個類(除非您只想為類方法提供一個類,我認為這不是您想要的)。 放在哪里都沒關系。 通常,僅類本身的對象所需的類是嵌套的良好候選者-但請閱讀下文。
  3. 您可以將其另存為A對象中的字段,並在A構造函數中創建它。 但我反對整個計划。

回答問題后,建議您檢查一些Parcelable示例。 由於其他原因,我喜歡這里的一個:開發人員Phil的http://www.developerphil.com/parcelable-vs-serializable/

有一個例子,另一個例子中有一個Parcelable類。 請注意,這比您需要的復雜得多-您只需要在A類中實現@override ,特別是@override

void writeToParcel(Parcel dest, int flags)
int describeContents()
static final Parcelable.Creator<A> CREATOR = new Parcelable.Creator<A>()

有關完整示例,請參見鏈接。 由於可以相當客觀地回答這個問題(我希望),所以我回答了您的問題,但請盡量避免“更好的問題”。 如果有的話,請在研究主題並沒有找到最終答案之后,嘗試“通過使用此方法獲得的速度/效率/最佳實踐收益”問題。 即使那樣,也可以認為是基於意見的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM