Java核心知识泛型

Posted 烟锁迷城

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java核心知识泛型相关的知识,希望对你有一定的参考价值。

1、基本概念

1.1、泛型本质

泛型的本质是参数化类型,它能够指定参数数据类型,统一类型防止出现参数类型转换问题。

1.2、泛型擦除

泛型只在编译阶段有效,编译之后JVM会采取去泛型化的措施,在运行阶段泛型失效。

2、详细介绍

2.1、无边界通配符

<?>是无边界通配符,可以适配任何类型。

public static void main(String[] args) {
    List<Integer> list = new ArrayList<>();
    list.add(1);
    list.add(2);
    loop(list);
}

private static void loop(List<?> list) {
    for (int i = 0; i < list.size(); i++) {
        System.out.println(list.get(i));
    }
}

2.2、上边界通配符

<? extends > 是上边界通配符,它限定了只有某类或其子类才可以作为通用类型。

public static void main(String[] args) {
    List<Integer> list = new ArrayList<>();
    list.add(1);
    list.add(2);
    loop(list);
}

private static void loop(List<? extends Integer> list) {
    for (int i = 0; i < list.size(); i++) {
        System.out.println(list.get(i));
    }
}

2.3、下边界通配符

<? super> 是上边界通配符,它限定了只有某类或其父类才可以作为通用类型。

public static void main(String[] args) {
    List<Integer> list = new ArrayList<>();
    list.add(1);
    list.add(2);
    loop(list);
}

private static void loop(List<? super Integer> list) {
    for (int i = 0; i < list.size(); i++) {
        System.out.println(list.get(i));
    }
}

3、具体使用

3.1、声明

泛型必须先声明,再使用。它的声明方式为<>,可以使用单个大写字母来表示,如<K>,<V>,<E>,<T>

3.2、场景

3.2.1、泛型类

增加代码灵活度,

public class Demo<T> {
    
    private T t;

    public Demo(T t) {
        this.t = t;
    }

    public T getT() {
        return t;
    }

    public void setT(T t) {
        this.t = t;
    }
}

3.2.2、泛型方法

在静态方法中,无法使用类中定义的泛型,但可以使用方法定义的泛型。

public class Demo<K, V> {

    /**
     *  使用类定义泛型的普通方法
     */
    public K setT(K k, V v) {
        return (K) null;
    }
    
    /**
     *  使用方法定义泛型的普通方法
     */
    public <T> T method2(T t, V v) {
        return (T) null;
    }
    
	/**
     *  使用方法定义泛型的静态方法
     */
    public static <B> B method3(B b) {
        return (B) null;
    }
}

3.2.3、泛型接口

public interface IDemo<T> {
    T method(T a, T b);
}

public class Demo implements IDemo<Integer> {

    @Override
    public Integer method(Integer a, Integer b) {
        return null;
    }
}

以上是关于Java核心知识泛型的主要内容,如果未能解决你的问题,请参考以下文章

Java核心技术知识点笔记—泛型程序设计

Java核心技术 卷Ⅰ 基础知识

Java核心技术-泛型程序设计

操作 Java 泛型:泛型在继承方面体现与通配符使用

java5核心基础之泛型-泛型作用于编译阶段-怎样将String对象传入Integer类型的泛型对象中?

Java核心技术卷一 6. java泛型程序设计