public void SetProducts(List<AbstractProduct> products);
现在假设玩具类Toys继承AbstractProduct,为什么一个List<Toys>,就不可以设置进List<AbstractProduct>类型的参数中呢?我知道只要接口参数的类型改为“List products”,就可以解决这个问题。但是这样从List获取出来的类型是Object,还要进行类型转换才能调用到AbstractProduct中的属性。那范型类型作为参数有何意义呢?ps. 好像参数是不能声明成“List<e extends AbstractProduct> products”这样的吧?是否有其他语法呢?

解决方案 »

  1.   

    改成这样:
    public void SetProducts(List<? extends AbstractProduct> products);
      

  2.   

    List<AbstractProduct> 和 List<Toys> 没有任何关系。后者并不是前者的子类。   具体可以看看关于泛型的类型擦除。但是 List<Toys> 是 List<? exntends AbstractProduct> 的子类。
      

  3.   

    泛型中的T必须在运行时是一个确定的类型,T就是T,不能更换成别的类型,跟T有没有子类父类无关,List<? exntends AbstractProduct>是个解决这种问题的办法