super T>是Java泛型中的“通配符(Wildcards)”和“边界(Bounds)”的概念。 <? extends T>:是指 “上界通配符(Upper Bounds Wildcards)” <? super T>:是指 “下界通配符(Lower Bounds Wildcards)” 为什么要用通配符和边界? 使用泛型的过程中,经常出现一种很别扭的情况。
extendsFruit>listlist=newArrayList<Apple>(){{add(newFruit());// 实例化时指定的T为Apple,放入Fruit对象会报错add(newApple());// Apple及其子类都可以放进去}}; 所以能放进去的对象不是看定义时T指定的类,而是看实例化时T指定的类。 2. <? superT>:下界通配符 要点1:实例化时的类只能是定义时类本身...
一、前言 最近依然在看《Java编程思想》这本书,说实话,非常晦涩难懂,除了讲的比较深入外,翻译太烂也是看不懂的一个重要原因。今天在看泛型这一章,也算是有些收获吧,所以写篇博客,记录一下其中比较容易遗忘的一个知识点: 在泛型中,extends和super关键字的含义和用法
在Java泛型中,extends和super用于限定类型参数的边界。extends用于限定类型参数必须是某个特定类的子类或其自身,而super用于限定类型参数必须是某个特定类的父类或其自身。1. extends extends用于限定类型参数的上界,即该类型参数必须是某个特定类的子类或其自身。例如,在下面的代码中,Box类的类型参数T...
在Java泛型中,extends和super是两个限定符,用于约束泛型类型参数的上下界, 它们的区别如下: extends用于指定上边界,即限制类型参数只能是某个类的子类或者本身,类似于“is-a”的关系。例如:T extends Number表示类型T必须是Number类或其子类。 super用于指定下边界,即限制类型参数只能是某个类的父类或者本身,类似于...
经常发现有List< super T>、Set<extends T>的声明,是什么意思呢?< super T>表示包括T在内的任何T的父类,< extends T>表示包括T在内的任何T的子类,下面我们详细分析一下两种通配符具体的区别。 经常发现有List< super T>、Set<extends T>的声明,是什么意思呢?< super T>表示包括T在内的任何T的父类,<...
在Java泛型中,super T和extends T的区别在于它们各自对应的角色:生产者和消费者。PECS原则概括了这一点,即生产者(Producer)应使用extends,而消费者(Consumer)则使用super。当作为生产者使用时,你需要一个列表能够提供T类型的元素,也就是说,你打算从中读取T类型的元素。在这种情况下,应将列表...
<? super T> 表示类型下界(Java Core中叫超类型限定),表示参数化类型是此类型的超类型(父类型),直至Object 在Java的类型擦除我们提到过:类型擦除中第一步——将所有的泛型参数用其最左边界(最顶级的父类型)类型替换。 这里的左边届可以通过extends来体现。
extends可用于返回类型限定,不能用于参数类型限定。super可用于参数类型限定,不能用于返回类型限定。 >带有super超类型限定的通配符可以向泛型对易用写入,带有extends子类型限定的通配符可以向泛型对象读取。 super限定类型安全时方法参数用,extends限定类型安全时返回值用 ...
<? super T> 表示类型下界(Java Core中叫超类型限定),表示参数化类型是此类型的超类型(父类型),直至Object 在Java的类型擦除我们提到过:类型擦除中第一步——将所有的泛型参数用其最左边界(最顶级的父类型)类型替换。 这里的左边届可以通过extends来体现。