、day3(Java新特性)
1、泛型——泛型就是面向编译器的语法现象,也就是说把错误放在编译阶段,这个地方可以用反射技术,透过泛型,在集合中装入不同类型的元素。
泛型的应用:1、类型安全检查2、编写通用程序java程序(java框架)
泛型集合之间的关系:
泛型应用的通用程序
自定义泛型:
public class TestT {public static void main(String[] args) {String[] test = { "aaa", "bbb", "ccc" };change(test, 1, 2);for (int i = 0; i < test.length; i++) {System.out.println(test[i]);}}public static <T> void change(T array[], int original, int destination) {// 这个地方时定义泛型,增加了程序的通用性T temp = array[original];array[original] = array[destination];array[destination] = temp;} }
这个地方的数组必须是对象类型,泛型可以有两个对象类型<K,V>
类的泛型定义:更能增加程序的重用行,下边这个实例是工具类的抽取
首先定义这个泛型类:
public class TUntils<T> {//把它抽成了工具类,这个地方的,所以下边的方法在定义是不用再加泛型了public void change(T array[], int original, int destination) {T temp = array[original];array[original] = array[destination];array[destination] = temp;}
这个是个测试:
public class TestT {public static void main(String[] args) {String[] test = { "aaa", "bbb", "ccc" };new TUntils().change(test, 1, 2);for (int i = 0; i < test.length; i++) {System.out.println(test[i]);}}
泛型类不对其中的静态方法是无效的
T template E element V value K Key 泛型可以用任意字母,不过就是最好用有意义的
泛型的通配符:(在字面意思就是说,它是任意的泛型类型,举例如下)
public static void main(String[] args) {List<String> test1 = new ArrayList<String>();test1.add("你好");print1(test1);List<Integer> test2 = new ArrayList<Integer>();test2.add(5);print1(test2);}private static void print1(List<?> test) {for (Object object : test) {System.out.println(object);}}
上边是通配符的比较好的应用。《泛型是任意类型的时候是可以使用通配符》
泛型通配符一般是和上下边界一块使用的,当使用了通配符后就不要使用与类型相关的方法了
通过上下边界,限定通配符的类型的范围:?extends Number 是Number的任意子类型
?super String String的任意父类型
上下边界不能同时使用
在实际的应用中往往是通过这样来使用的
在方法的参数中addAll(Collection<? extends Number>)也就是说可以传递一个装有Number子类型的集合