[英]Type safety: Unchecked cast in generic class
我有一個通用類。它看起來像這樣:
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
}
...
}
顯然只有當T
是 String 類型時才會調用conevertDataToJSONString
方法。但是有一個警告:
類型安全:從 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);
}
但是,您對if(type.equals(String.class))
讓我感到疑惑——因為這意味着您對T
實際是什么有一些預知。 您或許應該閱讀“為什么使用泛型?” 並考慮泛型在這里是否真的是正確的解決方案。
您必須通過以下代碼將字符串轉換為 T:
String value = gson.toJson(data);
T elem = transformer.transform(value);
return T;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.