Android 通用 属性

Android generic property

我有一个对象,其中一个 属性 应该可以存储通用对象。所有这些对象都扩展了一个基本的 class "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

有人可以给我提示吗?

谢谢, 乌尔克曼

这是否完成了您想要做的事情?

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 的泛型 class,然后您的 StoreObject 将有一个名为 object 的对象,其类型为 T(它扩展了 BaseObject),你也可以有一个类型为 TArrayList,这意味着列表中的所有对象必须是同一时间的。

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

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

然后那个 store 对象将有一个对象和一个 SomeClassExtendingBaseObject

类型的列表

将您的 Swift 翻译成 Java 的一个很好的翻译是:

public class StoreObject
{
    public Object object;

    public ArrayList<Object> list;
}

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