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

 

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

 

posted @ 2017-08-22 17:22  money云  阅读(508)  评论(0编辑  收藏  举报