Java300学习笔记(10)——泛型

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012292754/article/details/86635779

1 泛型

  • 泛型就是参数化类型,使用广泛的类型;
  • 接口中泛型只能用在方法中,不能使用在全局常量

1.1 起因

  • 数据类型不明确
  • 装入数据的类型都被当做 Object 对待,从而丢失自己的实际类型;
  • 获取数据时往往需要转型,效率低,容易产生错误

1.2 作用

  • 安全:在编译的时候检查类型安全
  • 省心:所有的强制转换都是自动和隐式的,提高代码的重用率;

2 泛型擦除

  • 在使用时没有指定具体的类型
  • 子类继承时没有指定类型

2.1 处理

  • 擦除后不进行类型检查
  • 一旦擦除之后按 Object 接收
  • 依然存在编译警告,加上 Object 可以去除,但是有些画蛇添足
public interface Comparable<T> {
}


//声明子类指定具体类型
class Comp implements Comparable<Integer>{
    
}


//擦除
class Comp1 implements Comparable{}

// 父类擦除,子类泛型
class Comp2<T> implements Comparable{}

// 子类泛型 >= 父类泛型
class Comp3<T> implements Comparable<T>{}

//父类泛型,子类擦除错误

3 通配符 ? extends super

  • 泛型没有多态,要实现这个功能,要使用多态;
  • 可以用在声明类型及声明方法参数上,不能用在声明类上;
  • ? 可以接收泛型的任意类型,只能接收和输出,不能修改。(方法声明时参数无法正确知道具体类型,因此不能修改)
  • ? extends 泛型上限
  • ? super 泛型下限

4 泛型与数组

  • 没有泛型数组,不能创建泛型数组
  • 可以只有声明,可以使用 ?

5 JDK7 改进

  • 声明时指定泛型,创建对象不用再次编写类型

猜你喜欢

转载自blog.csdn.net/u012292754/article/details/86635779
今日推荐