java基础笔记12-泛型详解

java基础笔记-泛型

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

泛型的好处

传统方法存在的问题

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

泛型介绍

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

泛型的语法

泛型的声明

interface 接口名{}
class 类名{}

  • 其中,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) {},修饰符后没有,eat方法不是泛型方法,而是使用了泛型

你可能感兴趣的:(课堂笔记,java,开发语言,泛型)