在Java中如何將Object對(duì)象轉(zhuǎn)換為具體實(shí)體類對(duì)象
在Java中,將Object對(duì)象轉(zhuǎn)換為具體實(shí)體類對(duì)象
在Java中,將Object對(duì)象轉(zhuǎn)換為具體實(shí)體類對(duì)象可以通過(guò)以下幾種方法實(shí)現(xiàn):
1.使用instanceof關(guān)鍵字進(jìn)行類型檢查和轉(zhuǎn)換:
首先,使用instanceof關(guān)鍵字檢查Object對(duì)象是否為目標(biāo)實(shí)體類的類型。
如果是,則進(jìn)行強(qiáng)制類型轉(zhuǎn)換,將其轉(zhuǎn)換為目標(biāo)實(shí)體類對(duì)象。
例如:
Object obj = ...;
if (obj instanceof User) {
User user = (User) obj;
}2.使用Jackson的ObjectMapper類的convertValue方法:
Jackson是一個(gè)流行的JSON處理庫(kù),可以輕松地將Object對(duì)象轉(zhuǎn)換為實(shí)體類對(duì)象。
使用方法如下:
ObjectMapper objectMapper = new ObjectMapper(); User user = objectMapper.convertValue(obj, User.class);
3.使用Fastjson的JSON.parseObject方法:
Fastjson是一個(gè)高效的JSON處理庫(kù),也可以用于將Object對(duì)象轉(zhuǎn)換為實(shí)體類對(duì)象。
使用方法如下:
User user = JSON.parseObject(JSON.toJSONString(obj), User.class);
Java中將Object類型轉(zhuǎn)換為自定義類型的問(wèn)題
Java中如何將Object類型對(duì)象轉(zhuǎn)換為自定義類型(特定情況下)
前置知識(shí) : java中是不能直接將Object類型的數(shù)據(jù)轉(zhuǎn)換為自定義類型的,除非該Object對(duì)象是該自定義類型的實(shí)例或者其子類的實(shí)例。也就是說(shuō),子類型可以轉(zhuǎn)換成為父類型,但是父類型轉(zhuǎn)換為子類型需要父類型的對(duì)象是該子類型的實(shí)例。否則會(huì)拋出ClassCastException。但是對(duì)于某種業(yè)務(wù)場(chǎng)景卻可以進(jìn)行存儲(chǔ)
場(chǎng)景實(shí)例
我們?cè)诮鉀Q緩存擊穿問(wèn)題時(shí),采用邏輯過(guò)期方法時(shí),就會(huì)在緩存中存儲(chǔ)過(guò)期時(shí)間的字段。
而為了統(tǒng)一存儲(chǔ)格式,我們通常會(huì)定義一個(gè)例如RedisData的類型來(lái)統(tǒng)一包裝數(shù)據(jù),方便進(jìn)行轉(zhuǎn)換并存儲(chǔ)。
其中,RedisData的結(jié)構(gòu)如下:
@Data
public class RedisData {
private LocalDateTime expireTime;
private Object data;
}那么我們?cè)谌〕鰰r(shí),就需要將取出的data從Object類型轉(zhuǎn)換為我們自己的數(shù)據(jù)類型(例如自定義類型Shop)
解決思路
由上述前置知識(shí)可知,通常情況下是不能轉(zhuǎn)的。
所以對(duì)于我們的寫法中,如何將Object對(duì)象轉(zhuǎn)換為Shop類型呢?
答案是再次借用JsonUtil工具,此時(shí)我們可以將data轉(zhuǎn)換為JsonObject,再通過(guò)反序列化將其轉(zhuǎn)換為Shop類型。
其中暗含的思想就是一個(gè)普通的Object由于你什么信息都沒(méi)有,所以轉(zhuǎn)換為一個(gè)具體類型肯定編譯器會(huì)懷疑轉(zhuǎn)換是否成功。但是對(duì)于一個(gè)Json字符串而言,對(duì)應(yīng)一個(gè)Bean對(duì)象,我們自然就可以想到,將Json字符串的格式和Bean對(duì)象的格式一一對(duì)應(yīng),便可以完成轉(zhuǎn)換。
正確寫法
JsonUtil.toBean((JsonObject)shop , Shop.class) // 需要手動(dòng)引入hutu工具包中的JavaUtil
到此這篇關(guān)于在Java中如何將Object對(duì)象轉(zhuǎn)換為具體實(shí)體類對(duì)象的文章就介紹到這了,更多相關(guān)java object對(duì)象轉(zhuǎn)換實(shí)體類對(duì)象內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java List<JSONObject>如何轉(zhuǎn)換為L(zhǎng)ist<實(shí)體類>
- 詳解Java中String JSONObject JSONArray List<實(shí)體類>轉(zhuǎn)換
- 在Java中將jsonObject轉(zhuǎn)換成對(duì)象的實(shí)現(xiàn)方法
- Java中JSONObject和Map<String,?Object>的轉(zhuǎn)換方法
- Java如何將任意類型的Object對(duì)象轉(zhuǎn)換為相應(yīng)的實(shí)體對(duì)象
- 在?Java?中將Object?轉(zhuǎn)換為?Int的四種方法
- Java將Object轉(zhuǎn)換為數(shù)組的代碼
相關(guān)文章
SpringBoot中利用MyBatis進(jìn)行數(shù)據(jù)操作的示例
這篇文章主要介紹了SpringBoot中利用MyBatis進(jìn)行數(shù)據(jù)操作,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-09-09
詳解springboot-mysql-pagehelper分頁(yè)插件集成
這篇文章主要介紹了springboot-mysql-pagehelper分頁(yè)插件集成,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07
MyBatis 源碼分析 之SqlSession接口和Executor類
mybatis框架在操作數(shù)據(jù)的時(shí)候,離不開SqlSession接口實(shí)例類的作用,下面通過(guò)本文給大家實(shí)例剖析MyBatis 源碼分析之SqlSession接口和Executor類,需要的朋友參考下吧2017-02-02
java通過(guò)客戶端訪問(wèn)服務(wù)器webservice的方法
這篇文章主要介紹了java通過(guò)客戶端訪問(wèn)服務(wù)器webservice的方法,涉及java創(chuàng)建與調(diào)用webservice的相關(guān)技巧,需要的朋友可以參考下2016-08-08
Java實(shí)現(xiàn)帶頭結(jié)點(diǎn)的單鏈表
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)帶頭結(jié)點(diǎn)的單鏈表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09
SpringMVC使用@ExceptionHandler注解在Controller中處理異常
這篇文章主要為大家介紹了SpringMVC使用@ExceptionHandler注解在Controller中處理異常示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10

