java泛型的extends super理解

关于java泛型中的extends,super,我们常常见到,但是不是常常蒙B,一会写报错一会读报错。其到底怎么回事,这里作一个浅析,当做自己的笔记。

上代码

public class Food{};

public class Fruitextends Food{}

public class Appleextends Fruit {}

public class Orangeextends Fruit {}

public void test(){

     List extendsList =new ArrayList<>();

     List  superList =new ArrayList<>();

     extendsList.add(new Fruit());

     Fruit f = extendsList.get(0);

     superList.add(new Orange());

     superList.add(new Apple());

     superList.add(new Fruit());

     superList.add(new Food());//只能添加Fruit或其子类

     Fruit furit = superList.get(0);

    Object obj = superList.get(0);

}

代码非常简单,下面说重点

1.? extends Fruit 的重点是?, extends Fruit 是用来限定?的范围的。限定?为Fruits或其子类。

因为?是Fruits或其子类,当你读取时,可以使用Fruits来接收。当你写入时,由于不确定?到底是哪个具体类型,不能写入。

2.?super Fruit 的重点是?, super Fruit 是用来限定?的范围的。限定?为Fruits或其超类。

因为?为Fruits的超类,当你读取时只能使用Object来接收。当你写入时,已经确定?为Fruits的超类,自然可以写入Fruits或其子类。

Object无法使用子类中的方法,也就基本上没用。

这就是PECS原则,是不是不好记,个人给它改了个名子,egsa(extends get super add),如果你还是记不住就记eg 好了, super是反过来的,如果你还是记不住,你就记章子怡,因为她演过“艺妓回忆录”,艺妓===eg。

如果还记不住,那您受累,换个地方吧。。。

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容