抽象泛型類中,json轉換型別丟失解決辦法
阿新 • • 發佈:2019-06-20
在 抽象泛型類中,一般會自動將資料轉換操作實現,使用者就不用關心資料轉換過程,專注業務處理就行了
重新實現TypeReference<T>類中_type獲取的實現,這裡是基於jackson的實現示例,JsonUtil工具類是對jackson的實現,這裡就不提供了,其他json轉換實現方法類似
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import com.bc.core.util.JsonUtil;
import com.fasterxml.jackson.core.type.TypeReference;
public abstract class BaseTopicMsgHandle<T> {
public abstract String topic();
public abstract void handle(T data);
public void jsonHandle(String json) {
T obj = toObject(json);
if (obj == null) {
return;
}
handle(obj);
}
protected TypeReferenceT typeReferenceT = new TypeReferenceT();
public T toObject(String json) {
return JsonUtil.toObject(json, typeReferenceT);
}
private class TypeReferenceT extends TypeReference<T> {
protected final Type _type;
TypeReferenceT() {
Type superClass = BaseTopicMsgHandle.this.getClass().getGenericSuperclass();
if (superClass instanceof Class<?>) {
throw new IllegalArgumentException(
"Internal error: TypeReference constructed without actual type information");
}
_type = ((ParameterizedType) superClass).getActualTypeArguments()[0];
}
@Override
public Type getType() {
return _type;
}
}
}