泛型

一.为什么使用泛型

        早期的Object类型可以接收任意的对象类型,但是在实际的使用中, 会有类型转换的问题。也就存在这隐患,所以Java提供了泛型来解决这个安全问题。

二.什么是泛型

1.定义

        泛型,就是指在类定义时不会设置类中的属性或方法参数的具体类型,而是在类使用时(创建对象)再进行类型的定义。

  • 泛型,即参数化类型。所谓参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。
  • 参数化类型,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式,然后在使用或调用时传入具体的类型。
  • Java泛型时JDK5中引入的一个新特性,泛型提供了编译时类型安全检测机制,泛型的好处就是在编译的时候能够检查类型安全。
2.代码示例 
public class Demo { //T可以为任意标识符,常见的如T、E、K、V等形式的参数常用于表示泛型
    private T data;
    T val;
}

 注:

        类声明后的<>中这个 T 被称为类型参数,用于指代任意类型,实际上这个T只是个代表,写什么都可以。表示此时的data,val在类定义时都没有明确类型,只有在使用时才告知编译器类型。出于规范,类型参数用单个的大写字母来代替。

三.泛型类

        泛型类用于类的定义中,被称为泛型类。通过泛型可以完成对一组类的操作对外开放相同的接口。

  • 泛型类的定义语法
class 类名称 <泛型标识,泛型标识,...> {
    private 泛型标识 变量名;
    ......
}
  • 常用泛型标识:T、E、K、V 
1. 泛型的使用

① 只含有一种泛型标识

public class Demo { //T可以为任意标识符,常见的如T、E、K、V等形式的参数常用于表示泛型
    private T data;
    T val;

    // 泛型的构造方法形参data的类型也为T,T的类型由外部指定
    public Demo(T data) {
        this.data = data;
    }

    // 泛型方法getData的返回值类型为,T的类型由外部指定
    public T getData(){
        return data;
    }
}

② 含有多种泛型标识

 泛型_第1张图片

 若此时data与val值的类型不一样,就可以定义多个泛型标识:

public class Demo {
    private K data;
    V val;


    public Demo() {

    }
    public Demo(K data,V val) {
        this.data = data;
        this.val = val;
    }

    public K getData(){
        return data;
    }

    public static void main(String[] args) {
        Demo demo = new Demo<>();
        demo.data = 10;
        demo.val = 'a';
    }
}

 泛型_第2张图片

 注:

  • 泛型类,如果没有指明具体的操作类型,那么此时的操作类型默认为Object。
  • 泛型类的类型参数只能是类类型,不能是基本数据类型。
  • 泛型类的类型参数(泛型标识)可以有很多个。

2.从泛型类派生子类

① 子类也是泛型类,子类和父类的泛型类型要一致

class A extends Demo

② 子类不是泛型类,父类要明确泛型的数据类型

class A extends Demo

四.泛型方法 

         此处的泛型方法指的是有自己的类型参数泛型_第3张图片

注:

  • 泛型方法始终以自己的类型参数为准,与类的类型参数无关。
  • 为了避免混淆,定义泛型方法时使用的类型参数尽量避免与类的类型参数一致。 

五.泛型接口 

        泛型接口与泛型类的定义及使用基本一致。

1.语法定义
interface 接口名称 <泛型标识,泛型标识,...>{

        泛型标识 方法名();

        ......

} 
2.泛型类的使用

①  实现类也是泛型类,实现类和接口的泛型类型要一致。

class  A implements Demo{   }

② 实现类不是泛型类, 接口要明确泛型的数据类型

class  A implements Demo{   }

你可能感兴趣的:(开发语言,java)