has*_*ian 0 java types type-conversion type-safety
我有一个Generic类.它看起来像这样:
public class DataConverter<T> implements Converter<T> {
@Override
public T convert(Class<T> type, Object value) {
if ((type.equals(String.class)) && ... ) {
return conevertDataToJSONString((Data) value);
}
...
}
private T conevertDataToJSONString(Data data) {
String value = gson.toJson(data);
return (T) value; // << Type safety: Unchecked cast from String to T
}
...
}
Run Code Online (Sandbox Code Playgroud)
显然conevertDataToJSONString只有在TString类型时调用的方法.但是有一个警告:
类型安全:从String到T的未选中强制转换
有没有办法解决这个问题而不使用SuppressWarnings:
@SuppressWarnings( "未登记")
方法之前?
看起来,你可以使用,Class.cast(Object)因为你已经拥有Class<T>:
@Override
public T convert(Class<T> type, Object value) {
if ((type.equals(String.class)) && ... ) {
// casting here
return type.cast( conevertDataToJSONString((Data) value) );
}
...
}
// no need to make this method generic
private String conevertDataToJSONString(Data data) {
return gson.toJson(data);
}
Run Code Online (Sandbox Code Playgroud)
然而,你的使用if(type.equals(String.class))让我感到奇怪 - 因为这意味着你对T实际情况有一些预知.您或许应该阅读"为什么要使用泛型?" 并考虑仿制药是否真的是正确的解决方案.