Java泛型用法
? 本质:参数化类型
泛型的擦除:
? 泛型只在编译阶段有效,编译之后JVM会采取去泛型化的措施.
? 泛型在运行阶段是没有效果
泛型通配符的介绍
概念
泛型的类型擦除
泛型只在编译阶段有效,泛型类型在逻辑上可看成是多个不同的类型,但是其实质都是同一个数据类型
编译之后程序会采取去泛型化的措施
泛型通配符的介绍
泛型的具体使用
泛型跟我们的成员属性一样,需要先声明才能使用.泛型的声明采用 <> 进行声明.
申明一般约定采用单个大写字母表示.常用的有 K E T V 等等字符
1.无边界通配符
通用的类型package com.atxiaodei;
import java.util.ArrayList;
import java.util.List;
/**
-
@ClassName Demo1
-
@Deacription 无边界通配符
-
@Author 王盟
-
@Date 2021/6/6 18:30
-
@Version 1.0
**/
public class Demo1 {
public static void main(String[] args) {
Listlist1 = new ArrayList<>();
list1.add("小得");
list1.add("卡布达");
list1.add("诸葛孔暗");
loop(list1);
}public static void loop(List<?> list){ for (int i = 0; i < list.size() ; i++) { System.out.println(list.get(i)); } }
}
2.上边界通配符
< ? extends Number > 代表从Number往下的子类货孙类对象都可以使用
package com.atxiaodei;
import java.util.ArrayList;
import java.util.List;
/**
-
@ClassName Demo2
-
@Deacription TODO
-
@Author 卡布达
-
@Date 2021/6/6 18:34
-
@Version 1.0
**/
public class Demo2 {
public static void main(String[] args) {
Listlist2 = new ArrayList<>();
list2.add(1);
list2.add(2);
list2.add(3);
loop(list2);
}/**
- ? extends Number
- 通用的类型必须是Number及其子类
- @param list
*/
public static void loop(List<? extends Number> list){
for (int i = 0; i < list.size() ; i++) {
System.out.println(list.get(i));
}
}
}
3.下边界通配符
代表从Integer 到Object所有的对象都可以 package com.atxiaodei; import java.util.ArrayList; import java.util.List; /** * @ClassName Demo3 * @Deacription TODO * @Author 卡布达 * @Date 2021/6/6 18:38 * @Version 1.0 **/ public class Demo3 { public static void main(String[] args) { List