【发布时间】:2011-06-04 16:47:55
【问题描述】:
也许我在理解泛型时遇到了一些问题,但我无法做一些对我来说看起来合乎逻辑的事情。也许你可以帮我澄清一下。
我正在开发一个 Java 库,并且有一个函数将调用一个平台,该平台将以 JSON 格式返回信息。我想创建一个名称空间,负责检索 JSON 信息并将其解析为业务对象。为此,我创建了这个:
JSON 类 - 有 2 个方法:
protected JSONObject readJsonFromUrl(String url)
打开流并下载 JSON 文件
public <T, U extends Parser> T readObjectFromUrl(String url, U parser)
是“入口点”。会调用readJsonFromUrl,并将返回值调用给解析器。
Parser类是一个抽象类,有这个接口
public abstract class Parser {
public abstract <T> T parse(JSONObject jsonObject);
}
我想做的是创建一个覆盖 parse 方法的子类,每个子类将返回不同的类型。 例如,联系人列表解析器如下所示:
public <T> T parse(JSONObject jsonObject) {
ContactList contactList = new ContactList();
//Simplified for clearness
contactList = parse(jsonObject);
return contactList;
}
问题是:我得到一个编译器错误,因为它需要一个 T,而不是一个联系人列表。
如果我更改为 ,则新方法的签名与父类的签名不匹配。
如果我将contactList 的声明更改为T contactList;,我将无法调用一些我需要的方法(例如addContact)。
我是不是弄错了泛型?在这种情况下,它们适合我想要的吗? 如果不是,您将如何实现类似的功能?
谢谢, 奥斯卡
编辑:使用 Object 而不是泛型的最佳解决方案是什么?好像不太好看:(
【问题讨论】:
标签: java generics architecture