泛型高级进阶一:泛型的基本使用

泛型

泛型高级进阶一:泛型的基本使用

泛型高级进阶二:泛型的高级使用


什么是泛型

Java泛型(generics)是JDK5中引入的一个新特性,泛型提供了编译时类型安全检测机制

  • 该机制允许程序员在编译时检测到非法的类型
  • 泛型的本质是参数类型,也就是说所操作的数据类型被指定为一个参数
  • 泛型不存在于JVM虚拟机

为什么使用泛型

  • 泛型可以增强编译时错误检测,减少因类型问题引发的运行时异常
  • 泛型具有更强的类型检查
  • 泛型可以避免类型转换
  • 泛型可以泛型算法,增加代码复用性

泛型的使用方法

1.泛型的引用方式

1、泛型类格式:

class name<T1, T2, ..., Tn>

2、泛型方法格式:

private <K,V> boolean compare(Pair<K,V> p1, Pair<K,V> p2)

3、调用格式:

Util.<K, V>compare(p1,p2)

2.泛型的参数

1、最常见的类型变量名有:
E:元素(在Java集合框架中有广泛的应用)
K:键
N:数字
T:类型
V:值

2、其他可用参数
S,U,V 等:第二,第三,第四个类型

3.泛型的参数定义

1、泛型的基本参数定义

Foo<T>中整个成为泛型类型
Foo<T>中的T为类型参数
Foo<String>中的String为类型变量,也可以称为实际类型参数

4.泛型的The Diamond钻石运算符

  • JDK7以下版本
Box<Integer> integerBox = new Box<Integer>();
  • JDK7及以上版本
Box<Integer> integerBox1 = new Box<>();// The Diamond(菱形) 类型推断

5.受限的类型参数(泛型继承和实现)

1、定义

  • 功能:对泛型变量的范围作出限制
  • 算法实现:关键就是利用受限类型参数
  • 格式: extends表达的意义:这里指的是广义上“扩展”,兼有“类继承”和“接口实现”之意

2、单一限制:单独继承Number
例如:U继承Number实现

<U extends Number>

3、多种限制:
多种限制下的格式语法要求:如果上限类型是一个类,必须第一位标出,否则编译错误
例如:A是继承,B和C是接口

<U extends A & B & C>

4、继承关系容易误解的地方:

  • 泛型的参数存在继承关系并不属于泛型继承
Box<Number>Box(Interger)

如下图:虽然Interger继承Number,但是box与Box(Interger)没有任何关系,它们均继承Object,

  • 存在继承关系的原则:class之间存在继承关系,且子class与父class需含至少一个相同的泛型
    如下图:ArrayLIst与List是继承关系,且存在相同的String泛型参数
    PayLoadList与List存在继承参数,且至少存在一个String泛型参数

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/android_koukou/article/details/108429421