北京行——java基础加强之泛型
、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子类型的集合