美文网首页
Java泛型

Java泛型

作者: fdsun | 来源:发表于2021-02-24 20:49 被阅读0次

    原文:https://gitee.com/SnailClimb/JavaGuide/blob/master/docs/java/basis/Java基础知识.md

    Q: Java 泛型了解么?什么是类型擦除?介绍一下常用的通配符?

    Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。

    Java 的泛型是伪泛型,这是因为 Java 在编译期间,所有的泛型信息都会被擦掉,这也就是通常所说类型擦除 。 更多关于类型擦除的问题,可以查看这篇文章:《Java 泛型类型擦除以及类型擦除带来的问题》

    List<Integer> list = new ArrayList<>();
    
    list.add(12);
    //这里直接添加会报错
    list.add("a");
    Class<? extends List> clazz = list.getClass();
    Method add = clazz.getDeclaredMethod("add", Object.class);
    //但是通过反射添加,是可以的
    add.invoke(list, "kl");
    
    System.out.println(list)
    
    

    泛型一般有三种使用方式:泛型类、泛型接口、泛型方法。

    1.泛型类:

    //此处T可以随便写为任意标识,常见的如T、E、K、V等形式的参数常用于表示泛型
    //在实例化泛型类时,必须指定T的具体类型
    public class Generic<T>{
    
        private T key;
    
        public Generic(T key) {
            this.key = key;
        }
    
        public T getKey(){
            return key;
        }
    }
    
    

    如何实例化泛型类:

    Generic<Integer> genericInteger = new Generic<Integer>(123456);
    
    

    2.泛型接口 :

    public interface Generator<T> {
        public T method();
    }
    
    

    实现泛型接口,不指定类型:

    class GeneratorImpl<T> implements Generator<T>{
        @Override
        public T method() {
            return null;
        }
    }
    
    

    实现泛型接口,指定类型:

    class GeneratorImpl<T> implements Generator<String>{
        @Override
        public String method() {
            return "hello";
        }
    }
    
    

    3.泛型方法 :

    public static <E> void printArray(E[] inputArray) {
        for (E element : inputArray) {
            System.out.printf("%s ", element);
        }
        System.out.println();
    }
    
    

    使用:

    // 创建不同类型数组: Integer, Double 和 Character
    Integer[] intArray = {1, 2, 3};
    String[] stringArray = {"Hello", "World"};
    printArray(intArray);
    printArray(stringArray);
    
    

    常用的通配符为: T,E,K,V,?

    • ? 表示不确定的 java 类型
    • T (type) 表示具体的一个 java 类型
    • K V (key value) 分别代表 java 键值中的 Key Value
    • E (element) 代表 Element

    更多关于 Java 泛型中的通配符可以查看这篇文章:《聊一聊-JAVA 泛型中的通配符 T,E,K,V,?》

    相关文章

      网友评论

          本文标题:Java泛型

          本文链接:https://www.haomeiwen.com/subject/vqkefltx.html