我如何优雅地解决这个内部对象/内部类的情况?

时间:2017-11-09 08:17:04

标签: java android interface inner-classes

我有一个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作为嵌套类,或者B.我可以简单地将它用作A中的变量/对象。

所以我的问题:

  1. 我应该选择哪个计划?

  2. 如果我使用计划A,我是否可以假设每次构建A类时都会构建我的嵌套类MetaClassA?

  3. 如果我使用计划B,我如何保证每次构建A类时都会构建一个MetaClassA对象?既然它扩展了imageView并且有点没有传统的构造函数?

  4. 提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

按顺序:

  1. 这是基于意见的,不应该是SO。在任何一个课程中,你都错过了Parcelable的意思 - 它是一个完全符合你想要的界面 - 从你的班级创建一个包裹。它的全部意义在于类本身知道如何创建自己的包 - 所以你不是自己发送对象,而是对象知道如何创建消息(可以用来构造一个相同的对象,如果需要的话)。
  2. 否。需要实例化一个类(除非你想要一个只用于类方法的类,我认为这不是你想要的)。你把它放在哪里都没关系。作为规则,只有类本身对象所需的类才是嵌套的良好候选者 - 但请阅读下文。
  3. 您可以将其保存为A对象中的字段,并在A构造函数中创建它。但是我反对整个计划。
  4. 在回答您的问题后,我建议您查看Parcelable的一些示例。这是我喜欢的其他原因:http://www.developerphil.com/parcelable-vs-serializable/,由开发人员Phil。

    在另一个范围内有一个Parcelable类的例子。请注意,这比您需要的更复杂 - 您只需要在类A中实现Parcelable,特别是@override

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

    请参阅链接以获取完整示例。因为这可以相当客观地回答(我希望)我回答了你的问题,但试着避免“什么是更好”的问题。如果有的话,在研究主题之后尝试“速度/效率/最佳实践从使用这个或那个”问题中获益 - 而不是找到确定的答案。即便如此,它也可能被视为基于意见。