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

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

將泛型參數(shù)傳遞給類的方法或?qū)⒎椒ǖ慕Y(jié)果轉(zhuǎn)換為給定的泛型類型?

將泛型參數(shù)傳遞給類的方法或?qū)⒎椒ǖ慕Y(jié)果轉(zhuǎn)換為給定的泛型類型?

蕪湖不蕪 2021-12-01 19:01:12
我需要從一個(gè)方法返回一個(gè)結(jié)果,其中返回的對象本身應(yīng)該與泛型參數(shù)具有相同的類型。這似乎比我想象的要困難。這是一個(gè)簡化的示例:import android.content.Context;public class PreferencesManager<T>{    private EncryptingPreferencesManager<T> encryptingPreferencesManager;    public PreferencesManager(Context context)    {        encryptingPreferencesManager = new EncryptingPreferencesManager<>(context);    }    public T getPreferencesData(String identifier)    {        T data = encryptingPreferencesManager.getData(identifier);    return data;    }}...和實(shí)例化的類:public class EncryptingPreferencesManager<T>{    private Context context;    public EncryptingPreferencesManager(Context context)    {        this.context = context;    }    @SuppressWarnings("unchecked")    public T getData(String identifier) throws GeneralSecurityException, IOException    {    //do some stuff and get the content, which is a JSON         final T result = (T)JsonMapper.fromJsonToJavaObject(decryptedJson, ??????.class);        return result;    }}這是 JsonMapper 方法:public static Object fromJsonToJavaObject(String jsonObject, Class<?> clazz) throws JsonParseException, JsonMappingException, IOException{    return objectMapper.readValue(jsonObject, clazz);}不應(yīng)更改 Json 映射器方法。它基本上有效。什么不能正常工作是中間的類與部分??????.class。如果我在這里傳遞一個(gè)像CorrectResultObject.class這樣的類定義,getData(...) 將返回一個(gè) CorrectResultObject 的實(shí)例,所以這是有效的。但這必須是通用的。由于我無法通過T.class 之類的東西,我想通過Object.class,但最終結(jié)果(在轉(zhuǎn)換后,如上所示)突然變成了 LinkedHashMap?!我不明白T的類型信息是如何丟失的,因?yàn)轭惐旧硎怯?T 實(shí)例化的,并且類型擦除只發(fā)生在轉(zhuǎn)換時(shí)的方法中,而不發(fā)生在實(shí)例化的類中?!我必須如何編寫類來實(shí)現(xiàn)getData(...)返回正確泛型類型的實(shí)例?
查看完整描述

2 回答

?
收到一只叮咚

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

您可以修改getData方法并將Class對象傳遞給它以返回同一類的對象。

像這樣的東西:


public T getData(String identifier, Class<? extends T> clazz) throws GeneralSecurityException, IOException {

    //do some stuff and get the content, which is a JSON 


    final T result = (T)JsonMapper.fromJsonToJavaObject(decryptedJson, clazz);


    return result;

}

希望這可以幫助


查看完整回答
反對 回復(fù) 2021-12-01
?
守著星空守著你

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

你說:


不應(yīng)更改 Json 映射器方法。它基本上有效。


我不會(huì)這么說。它也需要參數(shù)化,就像objectMapper.readValue.


改成這樣:


public static <T> T fromJsonToJavaObject(String jsonObject, Class<T> clazz) throws JsonParseException, JsonMappingException, IOException

{

    return objectMapper.readValue(jsonObject, clazz);

}

并避免在這里投射: (T)JsonMapper.fromJsonToJavaObject


查看完整回答
反對 回復(fù) 2021-12-01
  • 2 回答
  • 0 關(guān)注
  • 200 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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