类型安全:在通用类中取消选中

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( "未登记")

方法之前?

Rad*_*def 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);
}
Run Code Online (Sandbox Code Playgroud)

然而,你的使用if(type.equals(String.class))让我感到奇怪 - 因为这意味着你对T实际情况有一些预知.您或许应该阅读"为什么要使用泛型?" 并考虑仿制药是否真的是正确的解决方案.