我正在使用 Java/Jackson 解析从 WLAN 扬声器发送的 JSON 字符串,不幸的是,其格式有所不同。虽然响应中有一些静态且不那么重要的部分很容易解析,但真正重要的部分可能有许多不同的结构,具体取决于发送到扬声器的命令。
为此,我认为 Jackson 的 TypeReference() 最好将当前结构映射到键/值对,然后看看我们有什么。问题是我并不真正理解 TypeReference 是如何工作的,并且我不想盲目地使用“神奇”函数,因为我不知道实际发生了什么。该参考文献指出使用了子类,但以下语法对我来说并不是很清楚,尤其是末尾的空大括号:
TypeReference ref = new TypeReference<List<Integer>>() { };
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释一下这个课程是如何运作的吗?提前谢谢了!
TypeReference来自Jackson,还有 Gson 的TypeToken和 Spring 的ParameterizedTypeReference。
目的是捕获泛型类型并在运行时保留它,因为泛型仅在编译时起作用(类型擦除),因此在运行时,在您的示例中,它List<Integer>已被擦除。
结束类主体是用于创建匿名类的类实例创建表达式{}的一部分。参考文献是JLS - 第 15.9.1 节。
15.9.1。确定正在实例化的类 如果类实例创建表达式以类主体结束,则正在实例化的类是匿名类。然后:
如果 T 表示一个类,则声明由 T 命名的类的匿名直接子类。如果 T 表示的类是最终类,则会出现编译时错误。
无论哪种情况,子类的主体都是类实例创建表达式中给出的 ClassBody。
被实例化的类是匿名子类。