从泛型类型创建类或超类的实例



我是Java新手。我正在为Android开发类似于iOS应用程序的程序。应用程序的目的之一是从服务器获取数据。数据通常是数组字典,如"id=1"、"name=SomeName"。我有

class BaseArrayList<Type extends BaseItem> extends BaseItem {
public void processObject(Map<?,?> map) {
     //......
     //Some loop body
     Type item =  (Type) Type.create();
     item.processObject(map);
     //.....
}

BaseItem也有方法create():

public static BaseItem create() {
    return new BaseItem();
}

它有效,但对于BaseItem的子层,它不起作用。我发现静态方法不是重写的。

所以,我如何解决这个任务:只需创建BaseArrayList的自定义实例,就可以在数组中创建自定义类,例如:

new BaseArrayList<SomeSublassOfBaseItem>

这个问题在ObjC中解决了,就像这样-

[[memberClass alloc] init];

我发现静态方法不是重写的。

事实上,重写对静态方法不起作用。

有不同的方法可以实现您想要做的事情。一种是将Class<Type>对象传递给processObject方法,您可以通过调用newInstance()来使用该方法创建Type的实例:

public void processObject(Map<?, ?> map, Class<Type> cls) {
    // Uses the no-args constructor of Type to create a new instance
    Type item = cls.newInstance();
    // ...
}

另一种更灵活的方法是提供一个工厂来创建Type的实例。这样做的一个缺点是,您需要为想要用于此目的的BaseItem的每个子类实现一个工厂。

public interface Factory<T> {
    T create();
}
// ...
public void processObject(Map<?, ?> map, Factory<Type> factory) {
    // Calls the factory to create a new Type
    Type item = factory.create();
    // ...
}
// Factory implementation for BaseItem
public class BaseItemFactory implements Factory<BaseItem> {
    @Override
    public BaseItem create() {
        return new BaseItem();
    }
}

最新更新