泛型
# 泛型
泛型是 JDK5 中引入的特性,它把运行期间的问题提前到了编译期间,避免了强制类型转换
# 泛型格式
<类型> 按照变量规则书写即可 如: <E> <T>
<类型1,类型2...> 多个泛型格式,多个泛型之间用逗号隔开 如: <E,T,Q>
如果该泛型未接收到指定类型,则默认为 object 类型
# 泛型可以使用在
类后面 泛型类
public static class f<e> { int a; } public static void main(String[] args) { f<Integer> fa = new f<>(); // 在类后面加上<> 指定泛型 new出来的类只能使用指定类型对象,否则会出现编译时问题(泛型把运行时问题提前到编译时) }1
2
3
4
5
6
7方法申明上 泛型方法
方法定义一个泛型 在返回值前面加上泛型
public <E> e getA(e E) { return E; }1
2
3接口后面 泛型接口
在接口名后面定义泛型
public interface in<e>{ e show(e E); }1
2
3类实现
// 实现类不给指定类型 此类也需要成为泛型类 public class fa1<e> implements in<e>{ @Override public e show(e E) { return null; } } // 实现类给予指定数据类型 public class fa2 implements in<Integer>{ @Override public Integer show(Integer E) { return null; } }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 使用泛型方法
public static void main(String[] args) {
ArrayList<String> list =new ArrayList<>();
list.add("对对对");
list.add("对对对2");
list.add("对对对3");
String[] strings = list.toArray(list.toArray(new String[0])); // 需要传一个泛型指定的类型对象
System.out.println(Arrays.toString(strings));
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 类型通配符
<?> 可以匹配任何类型
ArrayList <?> : 可以匹配任何类型,但是 ArrayList 不能添加元素,获取出来的也是父类类型
public static void method1(ArrayList<?> list){}
1
# 类型通配符上限
<? extends 类型>
ArrayList <? extends Number> : 表示它的类型是 Number 或其他子类
public static void method2(ArrayList<? extends Number> list){}
1
# 类型通配符下限
<? super 类型>
ArrayList <? super Number> : 表示它的类型是 Nuber 或 Number 父类
public static void method3(ArrayList<? super Number> list){}
1

编辑 (opens new window)
上次更新: 2023/12/06, 01:31:48