zoukankan      html  css  js  c++  java
  • 当重载函数的参数是Object和Object数组的时候会发生什么情况!!!


    今天同学发现一个项目中的小bug,此处先贴出来,让大家指点一二,并且通过这个bug我们也学习到了不少知识!

    1  public void demo(Object obj){
    2         this.demo( new Object[] {obj});
    3     }
    4     public void demo(Integer[] obj){
    5         int i = (Integer)obj[0];
    6         System.out.println("hehe"+i);
    7     }

    这是一个类里面的两个重载的方法。

    写成这种情况,是不会报错的,但是一旦运行起来就会报错。因为,第一个demo方法永远在调用自己!

    有种方法很简单的就可以看出出来,按住ctrl键,对着第2行的demo方法左键,方法又跳到了第一个方法。所以,第一个demo方法永远调用自己!


    这里需要说明一下,Object类是所有类的父类。所以,Object对象数组,仍然是Object对象 ,这就是为什么第2行的方法会调用第一个demo方法了!

    因为调用第二个方法的话需要向下转型!但是我用向下转型仍然会报错。

    所以,自习看了项目中的代码。作者的原意就该是这样的!

    1   public void demo(Object obj){
    2         this.demo( new Object[] {obj});
    3     }
    4     public void demo(Object[] obj){
    5         int i = (Integer)obj[0];
    6         System.out.println("hehe"+i);
    7     }

    第二个demo方法的参数是Object数组,这样,this.demo( new Object[] {obj});就会直接找到第二个demo方法

    所以此处一个很巧妙的利用!

  • 相关阅读:
    深入理解linux启动过程
    Oracle 12c 的新功能:模式匹配查询
    AIX 常用命令汇总
    Oracle 11g ADRCI工具使用
    AIX TL的升级和回退
    oracle redo log的维护
    202. Happy Number
    198. House Robber
    203. Remove Linked List Elements
    217. Contains Duplicate
  • 原文地址:https://www.cnblogs.com/ilovessf/p/7412628.html
Copyright © 2011-2022 走看看