Java 类型安全性:类型Xclass的表达式需要未经检查的转换才能符合Xclass<;Yclass>;
如何解决这个问题? 类型安全:类型mResponseValue的表达式需要未经检查的转换才能符合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 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());