第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

序列化后Instanceof為同一個(gè)類返回false

序列化后Instanceof為同一個(gè)類返回false

回首憶惘然 2021-12-22 16:00:21
在 org.springframework.security.oauth2.common.util.SerializationUtils 在 Spring 啟動(dòng)應(yīng)用程序中進(jìn)行 fastxml 反序列化后,Instanceof 為同一類返回 falsenew ObjectMapper().readValue(serialized, User.class);班級(jí)public class User implements Serializable {//...}因?yàn)樾聦?duì)象 getClass().getClassloader() 返回不同的類加載器,如何解決這個(gè)和轉(zhuǎn)換問(wèn)題?
查看完整描述

1 回答

?
POPMUISE

TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個(gè)贊

在這種情況下,您應(yīng)該比較類名而不是使用instanceof. 即使類由不同的類加載器加載,規(guī)范名稱也將相同:


public boolean haveSameCanonicalName(Object object, Class<?> clazz) {

     String actualClassName = object.getClass().getCanonicalName();

     String expectedClassName = clazz.getCanonicalName();

     return actualClassName.equals(expectedClassName);

}

然后你可以像這樣使用它:


if (haveSameCanonicalName(user, User.class)) {

    // Do something here

}

更新:


如果您仍然需要投射對(duì)象,則有一種解決方法:


 public class CrossCastUtils {


    private final ObjectOutputStream oos;

    private final ObjectInputStream ois;


    public CrossCastUtils() throws IOException {

        final PipedOutputStream pos = new PipedOutputStream();

        final PipedInputStream pis = new PipedInputStream(pos);

        oos = new ObjectOutputStream(pos);

        ois = new ObjectInputStream(pis);

    }


    public <T> T cast(Object object) throws IOException, ClassNotFoundException {

        oos.writeObject(object);

        oos.flush();

        return (T) ois.readObject();

    }

嘗試運(yùn)行此測(cè)試:


@Test

public void testCrossCast(){

    Object initial = ... // retrieve it as you did before

    User result = CrossCastUtils.cast(initial);


    assertFalse(initial instanceof User);

    assertTrue(result instanceof User);

}


查看完整回答
反對(duì) 回復(fù) 2021-12-22
  • 1 回答
  • 0 關(guān)注
  • 361 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)