• java泛型


    今天看了一下java泛型的相关知识,简单的总结一下,以后补充

    java泛型与c++模板,功能上都是可以实现泛型编程的机制。

    c++的模板:

    · 有template关键字

    · 实例化模板会产生新的类,模板代码膨胀

    java泛型:

    · java泛型的实例化不会产生新的类,不会导致代码膨胀。

    · java的每个泛型类,都有一个对应的 类型擦出 后的 原始类。

    · 当调用泛型代码的时候,所有实例化的泛型代码都是调用该泛型的原始类的方法。

    · 原始类 是由java泛型,类型擦出以后产生的类。类型擦出以后,类型参数T,用Object来替代,如果T有限定类型,则用 限定类型 来替代类型参数。

    · 调用原始类的方法以后,返回的对象往往是Object或者是泛型T的限定类 类型,编译器会自动插入强制类型转换,转换成我们实际实例化的类 类型。

    · 为了解决类型擦除与多台的矛盾,java编译器会自动为泛型类的子类,添加一些桥方法,该桥方法的作用是,屏蔽父类中的同名方法,并且调用子类的同名覆盖方法,以实现java的多态。

    · java的多态性,是原生支持的。

    · java的引用特性,类似与c++中的指针变量。与c++中的引用,不是一个概念。

    java通配符(语言表述可能有点难理解):

    今天学习了一下通配符的相关概念,乍看起来,还真有点难理解。

    下面是从网上copy的通配符的适用原则:

    1.  如果你想从一个数据类型里获取数据,使用 ? extends 通配符

    · 子类型限定:? extends ClassA。

     表明所有的泛型都是ClassA的子类型,但是我们并不具体知道究竟是什么样的子类型(可能是ClassC,也可能是ClassD),

     所以使用子类型限定的泛型不允许插入元素,包括ClassA类型的元素。

     只能用来获取数据,并且可以保证获取的数据一定ClassA类型的对象,因为ClassA是所有类型参数的父类。

          
    2. 如果你想把对象写入一个数据结构里,使用 ? super 通配符

    · 父类型限定:? super ClassB

     表明所有的泛型参数都是ClassB的超类,但是我们并不具体知道是ClassB的哪一个超类。所以不允许插入超类类型的元素。但是ClassB的超类也一定是ClassA的超类。

     所以可以将ClassA类型的元素插入父类型限定的容器。(假设,ClassA是ClassB的子类)

    3. 如果你既想存,又想取,那就别用通配符。

    · 这个就不解释了。

  • 相关阅读:
    观察者模式
    模版方法
    event
    设计模式之观察者模式
    BOM
    javascript基础语法&4
    Document Object Model
    javascript基础语法&3
    javaScript基础语法&1
    sublimeText3安装
  • 原文地址:https://www.cnblogs.com/laorenjia/p/3233123.html
Copyright © 2020-2023  润新知