Android通用属性



我有一个对象,其中一个属性应该可以存储泛型对象。所有这些对象都扩展了一个基本类"BaseObject"。但是有很多对象扩展了"BaseObject",属性应该能够存储所有这些。。。

在Swift(iOS)中,我简单地将属性定义为"AnyObject",如下所示:

class StoreObject
{
    var object: AnyObject?
    var list: Array<AnyObject>?
}

在Java中,我尝试了这个:(短版本)

public class StoreObject
{
    // this should store one of the objects
    public Class<? extends BaseObject> object = null;
    // this should store a list(all the same type) of the objects
    public ArrayList<? extends BaseObject> list = null;
}

但这不起作用:(

示例:

StoreObject store = new StoreObject();
store.object = new TextObject; // TestObject extends BaseObject

在这里我得到了这个错误:

java.lang.ClassCastException: TestObject cannot be cast to java.lang.Class

有人能给我一个提示吗?

谢谢,Urkman

这能完成你想要做的事情吗?

public class StoreObject<T extends BaseObject> {
    public T object = null;
    // alternatively: public BaseObject object = null;
    // that will allow for object to be any subclass of BaseObject
    public ArrayList<T> list = null;
}

在本例中,您声明了一个泛型类,该类必须扩展BaseObject,然后您的StoreObject将有一个名为object的对象,该对象的类型为T(扩展了BaseObject),您还可以有一个T类型的ArrayList,这意味着列表中的所有对象必须同时存在。

您可以创建这样一个类的实例:

StoreObject<SomeClassExtendingBaseObject> store = new StoreObject<>();

然后CCD_ 8对象将具有对象和类型为CCD_ 9 的列表

将Swift翻译成Java的好方法是:

public class StoreObject
{
    public Object object;
    public ArrayList<Object> list;
}

AnyObject是Swift中所有对象都遵守的协议,因此AnyObject类型的变量可以包含对任何对象的引用。在Java中,Object是所有引用类型的超类型,类型为Object的变量可以保存对任何对象的引用。

相关内容

  • 没有找到相关文章

最新更新