我有一个对象,其中一个属性应该可以存储泛型对象。所有这些对象都扩展了一个基本类"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
的变量可以保存对任何对象的引用。