super T>是Java泛型中的“通配符(Wildcards)”和“边界(Bounds)”的概念。 <? extends T>:是指 “上界通配符(Upper Bounds Wildcards)” <? super T>:是指 “下界通配符(Lower Bounds Wildcards)” 为什么要用通配符和边界? 使用泛型的过程中,经常出现一种很别扭的情况。比如按照题主的例子,我们有Fruit类,...
此外,extends 和 super 也不能同时使用,因为它们表示的是上界和下界,不能同时存在。
extends可用于返回类型限定,不能用于参数类型限定。super可用于参数类型限定,不能用于返回类型限定。 >带有super超类型限定的通配符可以向泛型对易用写入,带有extends子类型限定的通配符可以向泛型对象读取。 super限定类型安全时方法参数用,extends限定类型安全时返回值用 这里,PECS原则 如下:泛型读用? extends T(T{T类...
< super T>表示包括T在内的任何T的父类,< extends T>表示包括T在内的任何T的子类,下面我们详细分析一下两种通配符具体的区别。 extends 复制 List<extendsNumber> foo3的通配符声明,意味着以下的赋值是合法的:// Number "extends" Number (in this context)List<extendsNumber> foo3 =newArrayList<extendsNumber...
List<? extends Fruit> fruits = apples; 1. 2. “? extends”是泛型类型的子类型相关性成为现实:Apple是Fruit的子类型,List<Apple> 是 List<? extends Fruit> 的子类型。 向下造型一个泛型对象的引用 现在我来介绍另外一种通配符:? super。如果类型B是类型A的超类型(父类型),那么C<B> 是 C<? super ...
super T>的区别 2015-11-05 23:18 −... grj0011 0 537 ?super T 和? extends T区别 2014-03-05 17:01 −Java 泛型 关键字说明 ? 通配符类型 <? extends T> 表示类型的上界,表示参数化类型的可能是T 或是 T的子类 <? super T> 表示类型下界(Java Core中叫超类型限定),表示参数化类型是此类...
或其父类>。<T extends Comparable<? super T>>代表类型是T的实例,且这个T要实现comparable 接口,接口的类型是comparable<T 或其父类> 两者的区别大概是前者范围更广,可以是T 或其子类,甚至是只要实现了comparable<T 或其父类>接口的其他类(虽然觉得没啥卵用)。而后者,只能是T 。。
extends:当你看到<T extends E>,这意味着类型参数T可以是类型E,或者是E的子类型。例如,如果你有...
生产者使用extends 如果你需要一个列表提供T类型的元素(即你想从列表中读取T类型的元素),你需要把这个列表声明成,比如List,因此你不能往该列表中添加任何元素。 消费者使用super 如果需要一个列表使用T类型的元素(即你想把T类型的元素加入到列表中),你需要把这个列表声明成,比如List,因此你不能保证从中读取到的元...