gpt4 book ai didi

java - 获取对象的类

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

我需要知道是否可以执行以下操作。我需要通过 TCP 传递一些对象。我选择使用 Gson 将它们转换为 JSON。但这个对象可以有不同的类型。主要是我有:

public class NetMessage {
public int code;
public Object obj;
}

代码和一个可以有不同类类型的对象。在转换为初始类型后如何重建对象?

测试:

public static void main(String[] args) {
Gsonizer gs = new Gsonizer();
Invoice v = new Invoice(123, 123, 10.1);
NetMessage nm = new NetMessage(2, v);
String s = (String) gs.toNet(nm);
NetMessage nm2 = (NetMessage) gs.fromNet(s);

System.out.println("> " +nm2.code);
System.out.println("> " +(Object)nm2.obj.getClass()); <<<<<<<< *

}

我的*标记了一个完全不同的类型,它是它打印的Gson lib中的内部类:类com.google.gson.internal.LinkedTreeMap

我怎样才能将对象重建为其初始类型。

编辑:Gson反序列化代码:

public Object fromNet(String obj){
return gsonizer.fromJson(obj, NetMessage.class);
}

最佳答案

基本上,按照你的设置,这是不可能的。

Gson 通过查看目标类型来执行反序列化。当该类型无关紧要时,它有一些默认值。对于Object,该类型是LinkedTreeMap

给定

public class NetMessage {
public int code;
public Object obj;
}

return  gsonizer.fromJson(obj, NetMessage.class);

您尚未指定如何反序列化 obj 字段。在这种情况下,Gson 将默认使用 LinkedTreeMap

唯一的解决方案是显式指定 obj 所需的类型。

关于java - 获取对象的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22748928/

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