zoukankan      html  css  js  c++  java
  • Java学习:泛型简介

    泛型

    泛型:是一种未知的数据类型,当我们不知道使用什么数据类型的时候,可以使用泛型

    泛型也可以看出是一个变量,用来接受数据类型

    • E e : Element 元素
    • T t : Type 类型

    ArrayList集合在定义的时候,不知道集合中都会存储什么类型的数据,所以类型使用泛型

    • E:未知的数据类型
    public class ArrayList<E>{
        public boolean add(E e){}
        public E get(int index){}
    }
    
    public class ArrayList<String>{
        public boolean add(String e){}//会把数据类型作为参数传递,把String赋值给泛型
        public String get(int index){}
    }

    创建集合对象,使用泛型
    好处:

    1. 避免了类型转换的麻烦,存储的是什么类型,取出的就是什么类型
    2. 把运行期异常(代码运行之后会抛出的异常),提升到了编译期(写代码的时候会报错)

    弊端:

    1. 泛型是什么类型,只能存储什么类型的数据

    创建集合对象,不使用泛型
    好处:

    1. 集合不使用泛型,默认的类型就是Object类型,可以存储任意类型的数据

    弊端:

    1. 不安全,会引发异常

    定义和使用泛型的类

    定义含有泛型的方法:泛型定义在方法的修饰符和返回值类型之间

    格式:

    修饰符 <泛型> 返回值类型 方法名(参数列表(使用泛型)){
      方法体;
    }

    含有泛型的方法,在调用方法的时候确定泛型的数据类型
    传递什么类型的参数,泛型就是什么类型

    含有泛型的接口,第一种使用方式:定义接口的实现类,实现接口,指定接口的泛型

    public interface Iterator<E>{
        E next();
    }

    Scanner类实现了Iterator接口,并指定接口的泛型为String,所以重写的next方法泛型默认就是String

    public final class Scanner implements Iterator<String>{
      publc String next(){}
    }

    含有泛型的接口第二种使用方式:接口使用什么泛型,实现类就使用什么泛型,类跟着接口走

    就相当于定义一个含有泛型的类,创建对象的时候确定泛型的类型

    public interface List<E>{
        boolean add(E e);
        E get (int index);
    }
    
    public class ArrayList<E> implements List<E>{
        public boolean add(E e){}
        public E get(int index){}
    }

    泛型的通配符

    泛型的通配符:

    • ?:代表任意的数据类型

    使用方式:

    • 不能创建对象使用
    • 只能作为方法的参数使用

    泛型的上限限定:? extends E 代表使用的泛型只能是E类型的子类/本身
    泛型的下限限定:? super E 代表使用的泛型只能是E类型的父类/本身

    //泛型的上限:此时的泛型?,必须是Number类型或者Number类型的子类
    public static void getElement1(Collection<? extends Number> coll){}
    //泛型的下限:此时的泛型?,必须是Number类型或者Number类型的父类
    public static void getElement2(Collection<? super Number> coll){}
  • 相关阅读:
    Benelux Algorithm Programming Contest 2016 Preliminary K. Translators’ Dinner(思路)
    Benelux Algorithm Programming Contest 2016 Preliminary Target Practice
    Benelux Algorithm Programming Contest 2016 Preliminary I. Rock Band
    Benelux Algorithm Programming Contest 2016 Preliminary A. Block Game
    ICPC Northeastern European Regional Contest 2019 Apprentice Learning Trajectory
    ICPC Northeastern European Regional Contest 2019 Key Storage
    2018 ACM ICPC Asia Regional
    2018 ACM ICPC Asia Regional
    Mybatis入库出现异常后,如何捕捉异常
    优雅停止 SpringBoot 服务,拒绝 kill -9 暴力停止
  • 原文地址:https://www.cnblogs.com/cainiao-chuanqi/p/11216032.html
Copyright © 2011-2022 走看看