Java 类型安全性:类型Xclass的表达式需要未经检查的转换才能符合Xclass<;Yclass>;

Java 类型安全性:类型Xclass的表达式需要未经检查的转换才能符合Xclass<;Yclass>;,java,Java,如何解决这个问题? 类型安全:类型mResponseValue的表达式需要未经检查的转换才能符合mResponseValue mResponseValue ResponseValue=Mobile.JSONtoClass(responseService,mResponseValue.class); 公共抽象类Mobile{ 公共静态字符串ObjToJson(对象obj) { Gson Gson=新的Gson(); 返回gson.toJson(obj); } 公共静态JSONtoCla

如何解决这个问题? 类型安全:类型mResponseValue的表达式需要未经检查的转换才能符合
mResponseValue

mResponseValue ResponseValue=Mobile.JSONtoClass(responseService,mResponseValue.class);

公共抽象类Mobile{
公共静态字符串ObjToJson(对象obj)
{    
Gson Gson=新的Gson();
返回gson.toJson(obj);
}
公共静态JSONtoClass(字符串strRequest,类类型)
{
Gson Gson=新的Gson();
返回gson.fromJson(strRequest,type);
}  

}此问题的根本原因是。调用
Mobile.JSONtoClass(responseService,mResponseValue.class)
则类型参数
T
将被
mResponseValue
替换,但您将返回值分配给
mResponseValue
,这将导致未选中强制转换

有问题的作业可分为两部分:

    mResponseValue rawResponseValue = = Mobile.JSONtoClass(responseService, mResponseValue.class);    // OK
    mResponseValue<mUserStatus> parameterizedResponseValue  = rawResponseValue; // Warning: Type safety ...
然后这样称呼:

TypeToken<mResponseValue<mUserStatus>> typeToken = new TypeToken<mResponseValue<mUserStatus>>() {};
mResponseValue<mUserStatus> responseValue = Mobile.JSONtoClass(responseService, typeToken.getType());
TypeToken-TypeToken=new-TypeToken(){};
mResponseValue responseValue=Mobile.JSONtoClass(responseService,typeToken.getType());
此解决方案可防止编译器警告,并实际修复由丢失类型信息引起的反序列化/序列化问题,请参阅
更多信息,请参见Gson用户指南。

虽然这是事实,但它没有说明他可以/应该做什么,这是他要求的……Gson类型中的JSON(字符串,类)方法不适用于参数(字符串,类型)@mirtige请确保您使用的是
java.lang.reflect.type
,我更新了我的答案,为
类型使用限定名
,使用通配符应该有效。
    mResponseValue rawResponseValue = = Mobile.JSONtoClass(responseService, mResponseValue.class);    // OK
    mResponseValue<mUserStatus> parameterizedResponseValue  = rawResponseValue; // Warning: Type safety ...
public static <T> T JSONtoClass(String strRequest, java.lang.reflect.Type typeOfT)
{
    Gson gson = new Gson();
    return gson.fromJson(strRequest, typeOfT);
}
TypeToken<mResponseValue<mUserStatus>> typeToken = new TypeToken<mResponseValue<mUserStatus>>() {};
mResponseValue<mUserStatus> responseValue = Mobile.JSONtoClass(responseService, typeToken.getType());