通过提供代码示例可以最好地解释这个Java问题:
void <T extends A> process(GenericType<T> listEntryType)
{
// ...
deserializeJson(data, new GenericType<List</* listEntryType */>>);
// ...
}
正如您所看到的,我正在尝试为GenericType
创建List
- 对象,但列表的条目类型仅作为GenericType
提供本身。但是我怎样才能做到这一点?我不知道该示例中的/* listEntryType */
必须被替换。
这是我实际问题的简化。以下是一些有关实际问题的信息,对于那些感兴趣的人:
实际上,该对象不包含在List
中,而是包含在Map
中。您可以看到T
必须扩展类A
。这意味着:
process()
的来电者只知道他想要处理T
(listEntryType
)类型的数据,但他不知道包含的数据的结构这个对象。
方法process()
知道数据的结构并知道A
的子类实例的确切位置,但不知道它的具体类型。
我知道我可以通过将process()
的参数更改为GenericType<List<T>>
来轻松解决问题,但我不希望调用者知道数据的结构。