当重载函数的参数是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方法
所以此处一个很巧妙的利用!