zoukankan      html  css  js  c++  java
  • Java 基础知识

    1.java 泛型

       1) 协变,就是父类和子类保持相同形式的变化,但是协变有时候被支持,有时候不被支持

       比如,在数组中,协变是支持的 比如  

       class Parent{}

       class Child extends Parent{}

        那么 Child[]可以赋值给 Parent[] ,这个就是协变

        但是,在泛型中,协变就不可以 比如 虽然Child extends Parent 但是,假设有个 Test<T>,则 Test<Child>不可以赋值给Test<Parent>,这2者毫无关系

       2)使用泛型的过程中,经常出现一种很别扭的情况。比如按照题主的例子,我们有

          Fruit 类,和它的派生类Apple类。然后有一个最简单的容器:Plate类。盘子里可以放一个泛型的“东西”。我们可以对这个东西做最简单的“放”和“取”的动作:set( )和get( )方法。现在我定义一个“水果盘子”,逻辑上水果盘子当然可以装苹果。但实际上Java编译器不允许这个操作。会报错,“装苹果的盘子”无法转换成“装水果的盘子”。所以我的尴尬症就犯了。实际上,编译器脑袋里认定的逻辑是这样的:

         苹果IS-A水果

         装苹果的盘子NOT-IS-A装水果的盘子

    所以,就算容器里装的东西之间有继承关系,但容器之间是没有继承关系的。所以我们不可以把Plate<Apple>的引用传递给Plate<Fruit>。为了让泛型用起来更舒服,Sun的大脑袋们就想出了<? extends T>和<? super T>的办法,来让”水果盘子“和”苹果盘子“之间发生关系。

       2. 什么是上界?下面代码就是“上界通配符(Upper Bounds Wildcards)”:

      3.  merge != null && merge == true,必须先判空,再比较值,否则会报空指针错误

  • 相关阅读:
    __type_traits(traits思想)--萃取型别
    traits编程技巧
    SGI空间分配器之第二级配置器剖析
    SGI空间分配器之第一级配置器剖析
    枚举类型与联合类型
    函数指针
    c++中的placement new操作符学习
    第十六章:模板与泛型编程
    第十五章:面向对象编程
    第十五章:面向对象编程
  • 原文地址:https://www.cnblogs.com/--CYH--/p/7058568.html
Copyright © 2011-2022 走看看