天天看点

java泛型泛型

泛型

泛型是具有占位符(类型参数)的类、结构、接口和方法,这些占位符是类、接口和方法所存储或使用的一个或多个类型的占位符。

  • 类型擦除

    -编码时采用泛型写的类型参数,编译器会在编译时时去掉,称为“类型擦除”。类型参数在编译后替换成Object,运行时虚拟机不知道泛型。

定义泛型

  • 泛型字符常用标志符
泛型标识符 说明
E 表示容器中的元素
T 表示普通的JAVA类
K 表示键
V 表示值
N 表示数据类型
? 表示不确定的JAVA类型

泛型类

  • 泛型类定义在类上,用户实例化类时,才把类型确定下来。在<>中可以添加一个或者多个类型参数声明,如,<E,T>等
  • 语法结构

代码示例

public class demo01<T> {
    private T flag;

    public T getFlag() {
        return flag;
    }

    public void setFlag(T flag) {
        this.flag = flag;
    }
}
           

泛型接口

  • 语法结构

代码示例

public interface demo02<T> {
    T getName(T name);
}
           

泛型方法

泛型方法指将方法的参数类型定义成泛型,以便在调用时接受不用类型的参数。调用泛型方法时,不需要告诉编辑器是什么类型,编译器可以自动推断出类型出来。

  • 语法结构

    无返回值 有返回值

    public <泛型符号> 泛型符号 getName(泛型表示符号){
    	return;
    }
               

代码示例

public class demo03 {
    
    public <T> void getName(T name){
        System.out.println(name);
    }

    public <T> T getMethod(T method){
        return method;
    }
}
           

泛型方法可变参数

  • 语法结构

代码示例

public class demo05 {

    public <T> void method(T ...args){
        for (int i = 0; i <args.length ; i++) {
            System.out.println(args[i]);
        }
    }
}
           

无界通配符

“?”表示类型通配符,代替具体的类型,解决具体类型不确定的问题。

  • 语法结构

代码示例

public class demo06<T> {

   private T age;

    public T getAge() {
        return age;
    }

    public void setAge(T age) {
        this.age = age;
    }
}
           
public class middle{

    public void method(demo06<?> a){
        System.out.println(a.getAge());
    }
}
           
public class demo06test {
    public static void main(String[] args) {
        middle middle = new middle();
        demo06<String> a6 = new demo06<>();
        a6.setAge("12");
        middel.method(a6);

        demo06<Integer> a66 = new demo06<>();
        a66.setAge(66);
        middel.method(a66);
    }
}
           

通配符的上限限定

上限限定表示通配符的类型是T类以及T类的子类或者T接口以及T接口的子接口

  • 语法结构

通配符的下限限定

下限限定表示通配符的类型T类以及T类的父类或者T接口以及T接口的父接口

  • 语法结构