当重载函数的参数是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方法

 

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

 

转载于:https://www.cnblogs.com/ilovessf/p/7412628.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值