繁体   English   中英

在活动之间传递扩展抽象类的对象

[英]Passing objects extending an abstract class between activities

我正在尝试通过为我玩的棋盘游戏编写帮助程序来学习Android开发。 我遇到的情况与活动之间传递自定义对象中的情况非常相似。 我所处的情况的不同之处在于,有问题的自定义对象都在扩展抽象类。

抽象类代表一个芯片(相当于纸牌游戏的玩法),如下所示:

import java.util.ArrayList;

public abstract class Chip{
    protected String name;
    protected int imageID;
    protected ArrayList<String> chipColors;
    protected ArrayList<String> chipTypes;

    public String toString(){
        return name;    
    }

    //Getters
    public String getName(){ return name; }
    public int getImageID() { return imageID; }
    public String getSet() { return set; }
    //Figure out how I need to deal with colors/types when I get there
}

扩展Chip的类的示例:

public class ChipA extends Chip{
    public ChipA (){
        super();
        name = "Chip A";
        imageID = R.drawable.chipa;
        set = "Basic";
        chipTypes = new ArrayList<String>();
        chipTypes.add("typeA");
        chipColors = new ArrayList<String>();
        chipColors.add("red");
        chipColors.add("green");
    }
}

我采用这种方法,以便可以通过在需要的地方调用new ChipA()来创建适当类型的new Chip(<long list of arguments that describe Chip A>) ,而不是new Chip(<long list of arguments that describe Chip A>) 我需要将这些芯片的集合从一项活动传递到另一项活动。 如本文所述,我已经通过存储要在全局范围内传递的筹码解决了此问题,但本文结尾建议使用意向附加功能进行此类操作。 有人可以更清楚地解释原因吗? 这只是约定吗? 如果只是可读性问题,那么此方法似乎相对紧凑且可读。

通过阅读,很明显,使用Intent Extras在活动之间传递任意类的预期方式是使它们实现Parcelable 然而,由于我与有关类的子类众多,这将意味着增加一个工作writeToParcelParcelable.Creator到每一个子类。 describeContents()看起来并不重要,据我了解,我可以在基本抽象类中实现它。)在这里,我可能会有很多子类,这意味着要添加很多重复的代码。 在这种情况下,仍可将实施Parcelable视为首选方法吗? 我是否缺少可以减少冗余代码的内容? 如果可能的话,我希望我的Chip子类保持相对紧凑。

请放心,我是Stack Overflow和Android开发的新手。

您不会丢失任何东西,可打包是实现此目的的首选方法。
我同意这会导致一些样板代码,但这是处理此问题的干净方法。

可以通过扩展Application类来跳过此操作,但这会带来一些复杂性:在某些情况下可以删除Application对象,这将导致非常麻烦的错误。 只需按预期方式处理并为沿该方式移动的每个对象创建构造函数(宗地),就更容易。

另一点是,单例模式本身越来越受到批评。 我不会详细介绍,这些讨论涵盖了该主题:
https://softwareengineering.stackexchange.com/questions/40373/so-singletons-are-bad-then-what
单身人士有什么不好呢?

更糟糕的是,在Android中,您甚至不能指望真正的Singleton。 您没有任何保证,即您正在操纵的应用程序对象(或您自己创建的Singleton)将在应用程序的整个生命周期中保持其状态。 (随机编号: http : //portabledroid.wordpress.com/2012/05/04/singletons-in-android/

因此,请不要使用Singleton来避免必须编写几个宗地。 它会回来,以后再咬你。

编辑:这是有关如何重现可怕的Application类崩溃的很好的解释: http : //www.developerphil.com/dont-store-data-in-the-application-object/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM