Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建GenericType<;列表>;但是列表条目类型可以作为GenericType本身使用_Java_Json_Generics_Java 7_Generic Programming - Fatal编程技术网

Java 创建GenericType<;列表>;但是列表条目类型可以作为GenericType本身使用

Java 创建GenericType<;列表>;但是列表条目类型可以作为GenericType本身使用,java,json,generics,java-7,generic-programming,Java,Json,Generics,Java 7,Generic Programming,通过给出一个代码示例,可以最好地解释此Java问题: void <T extends A> process(GenericType<T> listEntryType) { // ... deserializeJson(data, new GenericType<List</* listEntryType */>>); // ... } void进程(GenericType listEntryType) { // ...

通过给出一个代码示例,可以最好地解释此Java问题:

void  <T extends A> process(GenericType<T> listEntryType)
{
    // ...
    deserializeJson(data, new GenericType<List</* listEntryType */>>);
    // ...
}
void进程(GenericType listEntryType)
{
// ...
反序列化JSON(数据,新的GenericType);
// ...
}
如您所见,我正在尝试为
列表创建
GenericType
-对象,但列表的条目类型仅作为
GenericType
本身可用。但我怎样才能做到这一点呢?我不知道该用什么替换示例中的
/*listEntryType*/

这是我实际问题的简化。以下是一些关于实际问题的信息,供感兴趣的人参考:

实际上,对象不包含在
列表中,而是包含在
映射中。您可以看到
T
必须扩展类
A
。这意味着:

process()
的调用者只知道他想要处理
T
类型的数据(
listEntryType
),但他不知道包含此对象的数据的结构

方法
process()
知道数据的结构,知道
a
子类实例的确切位置,但不知道它的具体类型


我知道我可以通过将
process()
的参数更改为
GenericType
来轻松解决这个问题,但我不想让调用者知道数据的结构。

不行,因为Java不对嵌套的类型参数进行类型推断。您需要泛型吗?您是否可以在整个过程中使用
A
而不是
T
?JSON反序列化程序必须知道JSON数据包含
A
的哪个具体子类;反序列化JSON(数据,类型)无JohnnyMemonic,即使编译也无法运行。反序列化程序只接收结构包含
a
子类的任何实例的信息。但它不知道是哪个具体类。因为它不知道它只是尝试将哪个子类反序列化为
A
本身的实例(但失败了,因为我将
A
声明为抽象;-)