zoukankan      html  css  js  c++  java
  • 泛型

    一、泛型

    1、泛型:所谓泛型就是在定义类,定义接口时,通过一个标识表示类中的某个属性的类型。或者是某个方法的返回值及参数类型。这个参数在使用时(如:继承或者实现接口时,用这个类型申明的变量,创建对象时)确定(即传入实际类型参数,也称为类型实参)

    2、优势:保证元素存储的安全问题;解决获取元素类型的强制类型转换问题

    3、Map<String,DivObject> map = new HashMap();//指定key只能时String,Value也只能是指定的类型

    4、如果接口定义泛型类型,实现接口时必须要指定泛型类型

    5、泛型的核心思想:把一个集合中的内容限定为一个特定的数据类型


    二、自定义泛型的结构

    Interace List<T>或者class Test<K,V>,其中K、V、T不代表具体的值,只代表类型(不能使用八种基本类型,只能用其包装类,因为泛型必须时Object的子类),在实例化的时候要明确指定类型。其中泛型只能是类

    泛型的实例化:一定要在类名或者接口名指定类型参数 :List<Integer> list = new ArrayList<Integer>(),最后一个Integer可以不写,若不写,则底层会进行类型推断

    1、自定义泛型类

    public Class DivClass<T,K,V>{

    private T element;

    public T setElement(T element){

    this.element = element;

    }

    }

    2、自定义泛型接口

    public interface DivInterFace<T,K,V>{

    V setName(V name);

    }

    3、自定义泛型方法 //泛型方法和类没有关系

    public <T> T[] getArray(T[] arr){

    return arr;

    }

    ·子类不保留父类的泛型。

    Class Son<E,V> extends Father<E>{};Class Son extends Father<Integer>{};

    如果子类没有类型,则擦除

    若要保留(1)子类在继承的时候指定父类的泛型

    (2)子类需要再次申明父类泛型的类型(全部保留或者部分保留)

    ·静态方法不能使用泛型

    ·异常类不能使用泛型


    三、通配符

    1、通配符:?

    比如List<?>,Map<?,?>

    读取List<?>也是安全的,不管List的真实类型是什么,其都包含Object。

    写入的时候不知道具体的元素对象类型,所以不能添加对象。唯一的例外是null

    2、如果需要使用通配符

    (1)不能在泛型、方法、以及返回值前使用,不能在类泛型类的声明上使用,创建对象时构造方法后不能使用通配符

    (2)若要使用通配符时,要

    限定通配符的上限(需要extends关键字),如:List<? extends Father>表示所使用的类型不能大于Father类(是Father类或者Father的子类)

    限定通配符的下限,如List<? super Son> 表示所使用的类型不能小于Son类(是Son类或者Son的父类).

    (3)super在求无穷大(只有下界) extends在求无穷小(只有上界)

    (4)父类引用可以指向子类,所以super中直到了最小范围,故可以同父类指向


    四、八种数据类型的包装类

    1、int:Integer

    2、byte:Byte

    3、short:Short

    4、char:Character //char类型是无符号的,所以不能为负(从0开始)

    5、long:Long

    6、float:Float

    7、double:Double

    8、boolean:Boolean

  • 相关阅读:
    shutdown(0)和shutdown(1)
    MAC Pro 同时安装 Python2 和 Python3
    Linux常用命令大全(非常全!!!)
    ReentrantLock和synchronized的区别
    ReentrantLock和synchronized的区别
    ReentrantLock和synchronized的区别
    ReentrantLock和synchronized的区别
    Java反射与注解
    Java反射与注解
    Java反射与注解
  • 原文地址:https://www.cnblogs.com/JQbiu/p/11248173.html
Copyright © 2011-2022 走看看