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
),你也可以有一个类型为 T
的 ArrayList
,这意味着列表中的所有对象必须是同一时间的。
您可以像这样创建一个 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
类型的变量可以包含对任何对象的引用。
我有一个对象,其中一个 属性 应该可以存储通用对象。所有这些对象都扩展了一个基本的 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
),你也可以有一个类型为 T
的 ArrayList
,这意味着列表中的所有对象必须是同一时间的。
您可以像这样创建一个 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
类型的变量可以包含对任何对象的引用。