java 泛型List擦除问题(解决方案)

来源:互联网 发布:淘宝网店财务软件 编辑:程序博客网 时间:2024/04/29 23:34

java和c#比较,会有一个被C#耻笑的问题,就是java的泛型传入List时会被擦除,书上是这样解释的:

这里写图片描述

代码示例如下:

public abstract class AbstractOp implements Operation {

@Overridepublic T get(String customKey) {    String vStr = CacheUtil.get(getKey(customKey));    if (null == vStr) {        T vObj = this.getBizValue(customKey);        CacheUtil.put(getKey(customKey),    JSON.toJSONString(vObj), getExpireTime());        return vObj;    }    return JSON.parseObject(vStr, entityClass);}public int getExpireTime() {    return TairConstant.NOT_CARE_EXPIRE;}

}

public class OpserviceImpl implements Opservice {

@Autowiredprivate Operation<List<StudentDo>>      op;@Override public List<StudentDo> getStudents() {     return op.get("studentKey"); }

}

public class StudentDo{
private String name;
private int age;

public String getName(){
}

……代码省略
}

如上的代码,类Op继承AbstractOp,再将类Op注入到Opservice中,调用getStudents()方法时得到的是List,解决办法,改造get方法

@Overridepublic T get(String customKey) {    String vStr = CacheUtil.get(getKey(customKey));    if (null == vStr) {        T vObj = this.getBizValue();        CacheUtil.put(getKey(), JSON.toJSONString(vObj, SerializerFeature.WriteClassName), getExpireTime());        return vObj;    }    return (T) JSON.parse(vStr);}

注意 这里用的json是fastjson,JSON.toJSONString(vObj, SerializerFeature.WriteClassName)已经对泛型List擦除问题做了处理

0 0
原创粉丝点击