天天看点

java基础笔记12-泛型详解泛型的好处泛型介绍泛型的语法自定义泛型类自定义泛型接口自定义泛型方法

java基础笔记-泛型

  • 泛型的好处
    • 传统方法存在的问题
  • 泛型介绍
  • 泛型的语法
    • 泛型的声明
  • 自定义泛型类
    • 注意细节
  • 自定义泛型接口
    • 注意细节
  • 自定义泛型方法
    • 注意细节

泛型的好处

传统方法存在的问题

  • 不能对加入到集合ArrayList中的数据类型进行约束(不安全)
  • 遍历的时候,需要对数据类型进行转换,数据量大的时候会对效率有影响

泛型介绍

  • 泛型:可以表示数据类型的一种类型
  • 泛型又称参数化类型,是JDK5.0新出现的类型,为了解决数据安全性问题。
  • 泛型的作用是,可以在类声明时通过一个标识表示类中某个属性的类型,或者是某个方法的返回值类型,或者是参数类型。
class Person<E> {
	E s; // E表示数据的类型,该类型在定义Person对象的时候指定,即在编译期间,就确定E是什么类型
	public Person(E s) { // E可以是参数类型
		this.s = s;
	}
	public E f() { //E可以是返回值类型
		return s;
	}
}
           

泛型的语法

泛型的声明

interface 接口名{}

class 类名<K,V>{}

  • 其中,T、K、V不代表值,而是表示

    引用类型

  • 任意字母都可。常用T表示,是type的缩写。
  • 在给泛型指定具体类型后,可以传入该类型或其子类类型。
  • List list = new ArrayList();默认的泛型是Object。

自定义泛型类

  • 基本语法
class 类名<T,R...> {//...表示可以有多个泛型
成员
}
           

注意细节

  • 普通成员可以使用泛型(属性、方法)
  • 使用泛型的数组,不能初始化 eg:

    T[] t = new T[8]

    是不允许的。
  • 静态方法中不能使用类的泛型,因为静态是和类相关的,类加载时对象还没有创建。所以如果静态方法和静态属性使用了泛型,JVM就无法完成初始化。
  • 泛型类的类型,是在创建对象时确定的
  • 如果在创建对象时没有指定类型,则默认为object

自定义泛型接口

  • 基本语法
interface 接口名<T,R...>{
}
           

注意细节

  • 接口中静态成员也不能使用泛型
  • 泛型接口的类型,在继承接口或实现接口时确定
  • 没有指定类型,默认为Object类型

自定义泛型方法

  • 基本语法
修饰符 <T,R...> 返回类型 方法名(参数列表){
}
           

注意细节

  • 泛型方法,可以定义在普通类中,也可以定义在泛型类中
  • 当泛型方法被调用时,类型会确定
  • public void eat(E e) {},修饰符后没有<T,R…>,eat方法不是泛型方法,而是使用了泛型