Java泛型要解决的问题
类型安全 泛型的主要目标是实现java的类型安全。 泛型可以使编译器知道一个对象的限定类型是什么,这样编译器就可以在一个高的程度上验证这个类型 解决ClassCastException
消除了强制类型转换 使得代码可读性好,在编译阶段就能发现错误,而不是等到运行才发现错误
Java语言引入泛型的好处是安全简单。泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。
Java泛型的典型例子
List<T>
T可以是Integer,也可以是String,但必须是引用对象,不可以是基本类型。
比如List<String> 那么编译时候编译器就知道里面的元素都是String类型,如果不是,会报错。
泛型有三种使用方式 泛型接口 泛型类 泛型方法
泛型接口
设置泛型接口,子类负责实现,子类可以选择继续泛型也可以直接定义泛型具体类型(比如String,Integer)
泛型方法
泛型标记写在方法里就可以被叫做泛型方法,不一定要在泛型类中
泛型中<T> <?>的区别
public static void test(){ List<Student> list1 = new ArrayList<>(); list1.add(new Student("zhangsan",18,0)); list1.add(new Student("lisi",28,0)); list1.add(new Student("wangwu",24,1)); //这里如果add(new Teacher(...));就会报错,因为我们已经给List指定了数据类型为Student show1(list1); System.out.println("************分割线**************"); //这里我们并没有给List指定具体的数据类型,可以存放多种类型数据 List list2 = new ArrayList<>(); list2.add(new Student("zhaoliu",22,1)); list2.add(new Teacher("sunba",30,0)); show2(list2); }
- <? extends T> 是指 “上界通配符(Upper Bounds Wildcards)”
- <? super T> 是指 “下界通配符(Lower Bounds Wildcards)”
<? extends X>
那么元素可以是X类型及X类型的子类
<? super X>
那么元素可以是X类型及X类型的父类