Java 泛型

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类型的父类

原文地址:https://www.cnblogs.com/shineyoung/p/10423779.html