zoukankan      html  css  js  c++  java
  • Integer问题和通配符问题

    一、关于Integer

    • 首先补充下昨天的
    • intValue()方法 :以 int 类型返回该 Integer 的值。

    Integer方法,在其内部类IntegerCache中缓存了-128到127之间的整数,所有如果是这期间的数,系统不会重新new一个Integer,也就是说两个Integer引用变量所指向的对象是一样的。

    如果超过这个数值,那么进行对比返回的就是False.

    二、关于通配泛型放的位置

    通配符总共有三种类型:1、?:无界通配符  2、? extends 父类 :上界通配符  3、? super 子类 :下界通配符

    今早研究了一下,发现了一些问题:

    举个例子,父类Animals  子类有Dog和Cat ,Dog有子类SmallDog

    在方法外头设置<T>的概念

    1 public static <T> void print(T t) { //那么,没有这样的类型来提供使用,怎么办呢?
    2     //于是用<T>来声明一种“泛型”,然后参数就可以用T这种泛型来定义,否则没有参数类型没法定义参数
    3         System.out.println(t);
    4     }

    在方法参数里头设置

    1 public  static void eat(List<? super Dog> animals){
    2         Dog dog = (Dog) animals.get(1);
    3         dog.shout();
    4     }

    着重分析一下上界通配符和下界通配符,上界通配符可以放在方法体的外头或者直接放在方法的参数,例如

    1 public  static void eat(List<? extends Animals> animals){
    2         for(Animals an:animals)
    3                an.shout();
    4     }
    1  public  static <E extends Animals> void eat(List<E> animals){
    2          for(Animals an:animals)
    3               an.shout();  
    4   }

    而下界通配符,因为父类不能强转为子类,所有它是混着用的,不能直接<E super 子类>,可以这样<E extends 父类<? super E>>

    1 public  static void eat(List<? super Dog> animals){
    2         Dog dog = (Dog) animals.get(1);
    3         dog.shout();
    4     }

    上界通配符:

    • ? extends E 名为:向上限定,?代表E及其子类,也可以称之为:泛型固定上边界;
    • 当创建集合对象,List<? extends Person> list = new ArrayList<Person>();不能做添加操作,以及其他相关的操作
    •   原因:是在你做添加操作的时候,你只知道,你添加数据的上限。但是你无法确定你要添加数据的下限。
    • 当你做添加操作的时候,确定你具体添加的是什么类型,子类重写的方法,也必须是该类型的或者该类型的子类。
    • 但是,如果你添加的类型,和你的对象(例如:new ArrayList<Person>())中的类型不匹配,在实际操作中是有问题的。
    • 故而为了避免这种问题(类型转换异常),干脆不让你操作。

    下界通配符:

    • 但是 ?super E 向下限定,E及其父类(泛型固定下边界)在做添加的时候是不会有问题的。
    • 因为:你泛型的下边界,已经限制。再向集合中添加数据,只能是期本身或者他的子类。
    • List<? super Person> list = new ArrayList<Person>();
    • 在此只能添加 Person对象,以及Person的子类。

    参考链接:

    http://blog.csdn.net/baple/article/details/25056169

    http://blog.csdn.net/a695571342qqcom/article/details/53437125

  • 相关阅读:
    linux-命令
    linux-命令-cd,ls
    linux-命令-概述
    linux-文件
    IOPS和带宽
    随记
    CAP,Base原理
    DateUtil
    JDK SPI
    001-进程 和 线程
  • 原文地址:https://www.cnblogs.com/shigeng/p/8536946.html
Copyright © 2011-2022 走看看