首页新闻找找看学习计划

java泛型类继承问题?

0
[待解决问题]

//GeoResult 类

  public class GeoResult<T> implements Serializable {

    private static final long serialVersionUID = 1637452570977581370L;  

    private final T content;    private final Distance distance;

    public GeoResult(T content, Distance distance) {

      Assert.notNull(content, "Content must not be null!");

      Assert.notNull(distance, "Distance must not be null!"); 

      this.content = content;       

      this.distance = distance;

    }

  }

 

//通过继承扩展GeoResult类
//通过继承扩展GeoResult类
public class GeoExtendResult<T> extends GeoResult<T> implements Serializable{
 
    public GeoExtendResult(T content, Distance distance) {
        super(content, distance);
    }
}

//这是正确的
List<GeoResult<RedisGeoCommands.GeoLocation<String>>> geoResultList =  radiusGeo.getContent();

//报类型不匹配
List<GeoExtendResult<RedisGeoCommands.GeoLocation<String>>> geoResultList =  radiusGeo.getContent();

 

 

 

问题补充:

通过强转,可以成功. 想在GeoExtendResult 添加自己的属性不成功?

calm01的主页 calm01 | 菜鸟二级 | 园豆:208
提问于:2018-06-13 19:15
< >
分享
所有回答(2)
0

里氏替换原则了解一下
父类转子类要强转

、熙和 | 园豆:1481 (小虾三级) | 2018-06-13 20:13
0

这是一个老问题了,跟java的擦除泛型实现有关,在C#中这样写是没问题了,协变在java中需要使用子类通配符,

List<?extends GeoResult<RedisGeoCommands.GeoLocation<String>>> geoResultList =  radiusGeo.getContent();
jello chen | 园豆:6706 (大侠五级) | 2018-06-13 20:31

通过强转,可以成功。想在GeoExtendResult 添加自定义的属性怎么不成功?

支持(0) 反对(0) calm01 | 园豆:208 (菜鸟二级) | 2018-06-14 11:04

@calm01: 添加不成功是指什么

支持(0) 反对(0) jello chen | 园豆:6706 (大侠五级) | 2018-06-14 12:46

@jello chen: 我在GeoExtendResult添加了一个test属性,在输出的json怎么没有没有?

支持(0) 反对(0) calm01 | 园豆:208 (菜鸟二级) | 2018-06-20 15:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册