直接强转
但是有时候强转会失败,比如下图所示
虽然这种强转方式没有出现编译错误,但是运行起来可能就会报错了,比如下图所示
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>
序列化方式可以实现深拷贝