我有一个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
}
...
}
显然conevertDataToJSONString
方法仅在T
为String类型时调用。但是有一个警告:
类型安全:未选中从String转换为T
有没有办法解决这个问题而不使用SuppressWarnings
:
@SuppressWarnings(&#34;未选中&#34)
之前的方法?
答案 0 :(得分:6)
看起来,您可以使用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);
}
然而,你使用if(type.equals(String.class))
让我感到惊讶 - 因为这意味着你对T
实际上是什么有一些预知。您或许应该阅读"Why Use Generics?"并考虑泛型是否真的是正确的解决方案。
答案 1 :(得分:0)
您必须通过以下代码将字符串转换为T:
String value = gson.toJson(data);
T elem = transformer.transform(value);
return T;