深入java--可变参数列表

可变参数列表-Java SE5新特性

1.可变参数列表的简单实现
当调用方法时,方法的参数个数或类型未知时,称其为可变参数列表。在以前的Java代码中,可以使用Object数组来实现这样的功能。因为,所有的类都是直接或间接继承于Object类。

package test.itany.www;
public class Test
{
    public static void main(String[] args)
    {
        print(new Object[]{1,"asdf",new Double(4.5)});
    }
    public static void print<span style="font-size:12px;">Array</span>(Object[] obj)
    {
        for(Object o:obj)
        {
            System.out.print(o+"  ");
        }
    }
}
结果:
1  asdf  4.5  
<span style="font-size:12px;">这里printArray方法使用Object数组作为参数,并使用foreach语法遍历数组,打印每个对象。</span>

<div><span style="font-size:12px;">2.Java SE5实现可变参数列表</span></div><div><span style="font-size:12px;">同样的方法,参数可以这样定义,(Object…args),这样达到同样的效果。

</span></div><pre name="code" class="java">package test.itany.www;
public class Test
{
    public static void main(String[] args)
    {
        printArray(new Object[]{1,"asdf",new Double(4.5)});
        printArray(1,"asdf",new Double(4.5));
    }
    public static void printArray(Object...obj)
    {
        for(Object o:obj)
        {
            System.out.print(o+"  ");
        }
    }
}
结果:1  asdf  4.5  1  asdf  4.5  

这里,可变参数列表在输入参数时不需new一个数组,二十直接就可以输入变量,系统会自动创建一个数组,这里在for each循环中也体现出来,
当编译器发现它是一个数组,不会在其上执行任何转换,可以在可变参数列表中同时使用原始类型与包装类。

3 也可以指定所有可变参数的类型,下面的程序指定所有可变参数都必须是String。
package test.itany.www;
public class Test
{
    public static void main(String[] args)
    {
        printArray(new String[]{"asdf","ddddd"});
        printArray("asdf","ffffff");
    }
    public static void printArray(String...obj)
    {
        for(Object o:obj)
        {
            System.out.print(o+"  ");
        }
    }
}

package test.itany.www;
public class Test
{
    public static void main(String[] args)
    {
        printArray(new Integer[]{5,33});
        printArray(2222,new Integer(5));
    }
    public static void printArray(Integer...obj)
    {
        for(Object o:obj)
        {
            System.out.print(o+"  ");
        }
    }
}
3.可变参数列表的重载(Overloading)
如果出现重载的情况,则编译器会自动调用最适合的方法匹配之。
package test.itany.www;
public class Test
{
    public static void main(String[] args)
    {
        printArray("sdfsd","dsffsf");
        printArray(2222,new Integer(5));
    }
    public static void printArray(Integer...obj)
    {
        for(Object o:obj)
        {
            System.out.print(o+"  ");
        }
    }
    public static void printArray(String...obj)
    {
        for(Object o:obj)
        {
            System.out.print(o+"  ");
        }
    }
}
结果:sdfsd  dsffsf  2222  5  

<span style="font-size:18px;"><strong><span style="color:#FF0000;">重载的方法必须保持一致的参数形式。</span></strong></span>
不允许
<pre name="code" class="java">public class OverloadingVarargs2 {
            
       static void f(float i,Character...args){
            
              System.out.println("first");
            
       }
            
 
            
       static void f(Character...args){
            
              System.out.println("second");
            
       }
            
      
            
       public static void main(String[] args){
            
              f(1,'a');
            
              f('a','b');//Error
            
       }
            
}



但可以
public class OverloadingVarargs2 {
       static void f(float i,Character...args){
              System.out.println("first");
       }
 
       static void f(char c,Character...args){
              System.out.println("second");
       }
      
       public static void main(String[] args){
              f(1,'a');
              f('a','b');
       }
}


 







 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值