泛型的本质是参数化类型,就是将类型由原来的具体的类型参数化,然后在使用/调用时传入具体的类型。
定义格式:<类型>,<类型>.将来具体调用时候给定的类型可以看成实参,并且实参的类型只能是引用数据类型。
泛型的好处:把运行时期的问题提前到了编译期间。避免了强制类型转换。
泛型类:修饰符class类名<类型>{}
泛型方法:修饰符<类型>返回值类型 方法名(类型 变量名){}
泛型接口:修饰符interface接口<类型>{}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package 泛型;

public class Generic {
public <T> void show(T t) {
System.out.println(t);
}
}



package 泛型;

public class GenericDemo {

public static void main(String[] args) {
// TODO Auto-generated method stub
Generic g=new Generic();
g.show("zzz");
g.show(11);
g.show(false);

}

}
1
2
3
4

zzz
11
false

为了表示各种泛型List的父类,可以使用类型通配符。
List<?>:表示元素类型未知的List。它的元素可以匹配任何的类型。
List<?extends Number>:他表示的类型是Number或者其子类型
List<?super Number>:他表示的类型是Number或者其父类型

可变参数又称参数个数可变,用作方法的形参出现,那么方法参数个数就是可变的。
格式:修饰符 返回值类型 方法名(数据类型…变量名)
范例:public static int sum(int...a){}
可变参数注意事项:
1.这里的变量其实是一个数组
2.如果一个方法有多个参数,包含可变参数,可变参数要放在最后
使用:
Arrays工具类中有一个静态方法:
public static<T> List <T> asList(T...a)
返回值由指定数组支持的固定大小的列表
返回的集合奴能做增删操作,可以做修改操作。
List接口中有一个静态方法:
public static <E> List <E> of(E...elements):
返回包含任意数量元素的不可变列表
返回的集合不能做增删改操作
Set接口中有一个静态方法:
public static <E> Set<E> of(E...elements):
返回一个包含任意数量元素的不可变集合
返回的集合不能做增删操作,没有修改的方法