zoukankan      html  css  js  c++  java
  • Java 泛型

    1、介绍

      泛型可以参数化类型,在编写代码时可以定义带泛型的类或者方法,编译时使用具体的类型来替换。使用泛型可以在编译时检测出错误而不是在运行时检测出错误,这样可以使泛型代码向后兼容使用原始类型的遗留代码,也可以提高代码的可靠性和可读性。通常考虑对在类中要操作的引用数据类型不确定时使用泛型。

    2、定义泛型类、接口和方法

    泛型类

    /**
     * 参数T可以为任意标识,最好使用常见的如T、E、K、V等形式的参数常用于表示泛型
     * 在实例化泛型类时,必须指定T的具体类型
     */
    public class GenericClass<T> {
        /**
         * 泛型变量
         */
        private T var;public GenericClass(T var) {
            this.var = var;
        }
    
        /**
         * 泛型方法
         * @return
         */
        public T genericMethod() {
            return var;
        }
    }
       GenericClass<Integer> genericClass = new GenericClass<Integer>(100);
       GenericClass<String> genericClass2 = new GenericClass<String>("kinson");
    
       System.out.println(genericClass.getVar());
       System.out.println(genericClass2.getVar());

    泛型接口

    public interface GenericInterface<T> {
    
        T study();
    }
    /**
     * 不传入具体的泛型参数类型,此时需要将泛型的声明加上
     */
    public class GenericStudy<T> implements GenericInterface<T> {
      @Override
      public T study() {
      return (T)"Java";
      }
    }
    /**
     * 传入具体的泛型参数类型,此时所有使用泛型的地方都需要改成传入的是参类型
     */
    public class JavaStudy implements GenericInterface<String> {
        @Override
        public String study() {
            return "Java";
        }
    }

    泛型方法

        /**
         * 泛型方法
         *
         * @param var
         * @param <T>
         * @return
         */
        public <T> T show(T var) {
            return var;
        }
    
        public static <T> T print(GenericClass<T> genericClass) {
            return genericClass.getVar();
        }

    3、泛型通配符

      有三种形式,分别是?、? extends T和? super T,其中T是泛型类型。第一个?是非受限统配,等效于? extends Object。第二个? extends T是受限通配,表示T或者是T的子类型。第三个? super T是下限通配,表示T或者T的父类型。在具体的使用过程中,可以为传入的泛型类型实参指定上下边界的限制,如? extends Number来限制为父类为Number类型。

    4、注意点

    • 泛型类型必须是引用类型,不能是int、double等基本类型
    • 不能创建一个确切的泛型类型的数组。
    • 在静态上下文中不允许累的参数是泛型类型
    • 异常类不能是泛型的
  • 相关阅读:
    opencv下载,安装教程
    VS2010中程序编译生成都是正确的,直接生成的exe也是正确的,就是在VS中运行出现错误
    Oracle11g em启动报此网站的安全证书有问题的解决方案
    Python教程百度云资源分享,全套,完整版!!!
    Python视频教程免费分享(2020年最新版)
    Python 环境搭建(Win 安装以及Mac OS 安装)
    Python学习路线图(2020年最新版)
    Python爬虫入门教程之BeautifulSoup
    Python数据分析练手:分析知乎大V
    python 可变对象与不可变对象
  • 原文地址:https://www.cnblogs.com/kingsonfu/p/10566990.html
Copyright © 2011-2022 走看看