直接强转

但是有时候强转会失败,比如下图所示

虽然这种强转方式没有出现编译错误,但是运行起来可能就会报错了,比如下图所示

 java.lang.ClassCastException: class java.util.LinkedHashMap cannot be cast to class cn.xxxxx.xxxxx.xxxx.models.Zjzfxmsp (java.util.LinkedHashMap is in module java.base of loader 'bootstrap'; cn.xxxxx.xxxxx.xxxx.models.Zjzfxmsp is in unnamed module of loader org.springframework.boot.loader.LaunchedURLClassLoader @728938a9)

大概意思是:java.util.LlinkedHashMap位于加载器“bootstrap”的模块java.base中,而我定义的类在LaunchedURLClassLoader加载器中,强转失败。

 

有时候调用其他方法返回来的值是Object类型,可能实际上是LlinkedHashMap等,直接强转虽然不会编译错误,但却是强转不了的,这种情况下就用序列化和反序列化来转成自己想要的实体类。

 比如以下方式:

1、使用Jackson序列化方式

下面代码是例子

ObjectMapper objectMapper = new ObjectMapper();
Zjzfxmsp zfsp = objectMapper.convertValue(object, Zjzfxmsp.class);

或者

ObjectMapper objectMapper = new ObjectMapper();
//序列化成JSON格式字符串
String json = objectMapper.writeValueAsString(object);
//反序列化成实体类对象
Job copyUser = objectMapper.readValue(json, Job.class);

2、使用Gson序列化方式

Gson gson = new Gson();
//序列化成JSON格式字符串
String json = gson.toJson(object);
//反序列化成实体类对象
Job job1 = gson.fromJson(json, Job.class);

依赖

<!--    gson依赖    -->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.6</version>
        </dependency>

 

序列化方式可以实现深拷贝