gpt4 book ai didi

java - 从泛型类型创建类或父类(super class)的实例

转载 作者:行者123 更新时间:2023-12-01 15:28:04 25 4
gpt4 key购买 nike

我是 Java 新手。我正在开发类似于 iOS 应用程序的 Android 程序。应用程序的目的之一是从服务器获取数据。数据通常是带有字典数组,例如“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];

最佳答案

I found that static methods are not overriding.

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

有多种方法可以实现您想要做的事情。一是通过一个Class<Type>反对你的processObject方法,您可以使用它来创建 Type 的实例通过调用 newInstance()关于它:

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();
}
}

关于java - 从泛型类型创建类或父类(super class)的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9926344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com