通配符>总体说明:
1、表示不限定通配符,通常与集合配合使用。
2、集合类中所用类型,不继承父子关系。如Base是基类,Child为Base的子类,则List 和 List 不具备继承关系,并且二者没有任何关系。
3、 extends T> 称为上线通配符,表示 T类型及其T子类。
4、 super T> 称为下线通配符,表示 T类型及其父类。
无限定通配符>:
1、通常与集合配合使用。
2、集合中的限定类型,表示集合中只能包含一种特定类型。而不限类型则表示不限定任何类型。
一但转换为不限类型,则不可以向集合中增加任何类型数据,只可以查询集合size、判断集合是否为空等与类型无关的集合属性。
3、通常配合 extends T> 和 super T>使用
无限定通配符> 代码示例
package com.booby.generic;
import java.util.ArrayList;
import java.util.List;
/**
* 功能描述: ? 无限定通配符
*
* @author: lizt
* @date: 2020/8/15 23:30
**/
public class GenericQuestionMark {
public static void main(String[] args) {
List stringList = new ArrayList<>();
stringList.add("abc");
//编译报错
stringList.add(123);
List integerList = new ArrayList<>();
//编译报错
integerList.add("abc");
integerList.add(123);
// List> list = new ArrayList<>();
List> list = stringList;
//编译报错
list.add(123);
//编译报错
list.add("abc");
//输出集合的size 是否为空
list.size();
list.isEmpty();
}
}
上线通配符 extends T>:
1、表示一定范围内的类型控制,符合规则的类型是T类型及其T类型的子类
2、表示的集合不可以变动,比如add操作
上线通配符 extends T> 代码示例
package com.booby.generic;
import java.util.ArrayList;
import java.util.List;
/**
* 功能描述: 上线通配符
*
* @author: lizt
* @date: 2020/8/15 23:31
**/
public class GenericUpperBoundary {
public static void main(String[] args) {
List list = new ArrayList<>();
list.add(123);
List extends Number> numberList = list;
System.out.println(numberList.get(0));
// 不可以增加元素
//numberList.add(123L):
}
}
下线通配符 super T>:
1、表示一定范围内的类型控制,符合规则的类型是T类型及其T类型的父类
2、表示的集合既可以增加也可以访问集合元素
下线通配符 super T>代码示例:
package com.booby.generic;
import java.util.ArrayList;
import java.util.List;
/**
* 功能描述: 下线通配符
*
* @author: lizt
* @date: 2020/8/15 23:32
**/
public class GenericLowerBoundary {
public static void main(String[] args) {
List super Number> numberList = new ArrayList<>();
numberList.add(123);
System.out.println(numberList.get(0));
}
}
泛型通配符相关文章: