zoukankan      html  css  js  c++  java
  • 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. 如果你既想存,又想取,那就别用通配符。

    · 这个就不解释了。

  • 相关阅读:
    JZOJ8月10日提高组T2 Fix
    【GDOI2007】JZOJ2020年8月10日提高组T1 夏娜的菠萝包
    JZOJ8月10日提高组反思
    【NOIP2012模拟8.7】JZOJ2020年8月8日提高组T1 奶牛编号
    JZOJ8月8日提高组反思
    【佛山市选2013】JZOJ2020年8月7日T4 排列
    【佛山市选2013】JZOJ2020年8月7日提高组T3 海明距离
    【佛山市选2013】JZOJ2020年8月7日提高组T2 树环转换
    【佛山市选2013】JZOJ2020年8月7日提高组T1 回文子序列
    写给在工厂上班的大学同学们
  • 原文地址:https://www.cnblogs.com/laorenjia/p/3233123.html
Copyright © 2011-2022 走看看