什么是通配符
顾名思义 所有都能匹配的一种符号
分类
<? extends T>
(无穷小,T]
必须是T
的子类 或者 其 本身
<? super T>
[T,无穷大)
必须是T
的父类 或者 其 本身
示例
public class test {
/**
* 有限制条件使用通配符
* extends super 区别
*/
@Test
public void test(){
List<? extends Person> list1 = null;
List<? super Person> list2 = null;
List<Student> list3 = null;
List<Person> list4 = null;
List<Object> list5 = null;
list1 = list3;
list1 = list4;
/*
* list1 = list5;
* Incompatible types.
Required:
List
<? extends com.generci.day02.custom.Person>
Found:
List
<java.lang.Object>
*
* ? extends Person必须是Person的子类及其本身
* 相当于 <= Person
* */
/**
* ? super Person
* 相当于 >= Person
*/
// list2 = list3;
list2 = list4;
list2 = list5;
}
}
小结
使用类似<T extends Number>
定义泛型类时表示:
泛型类型限定为Number
以及Number
的子类
使用extends
通配符表示可以读 不能写
使用super
通配符表示只能写 不能读。
使用类似<T super Number>
定义泛型类时表示:
泛型类型限定为Number
以及Number
的父类