Java定义参数个数可变的方法:Object...objects

Posted 花伤情犹在

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java定义参数个数可变的方法:Object...objects相关的知识,希望对你有一定的参考价值。

前言

在Java1.5之后,java允许定义形参个数可变的方法。

只要在一个形参的“类型”与“参数名”之间加上三个连续的“.”(即“…”,英文里的句中省略号),就可以让它和不确定个数实参相匹配。而一个带有这样的形参的方法,就是一个实参个数可变的方法。

例如:

public static void test1(int...ints){

}

注意,只有最后一个形参才能被定义成“能和不确定个实参相匹配”的。因此,一个方法里只能有一个这样的形参。另外,如果这个方法还有其它的形参,要把它们放到前面的位置上。

编译器会在背地里把这最后一个形参转化为一个数组形参,并在编译出的class文件里作上一个记号,表明这是个实参个数可变的方法。

例如:
形参个数可变的方法:

public static void test1(int...ints){

}

形参转化为一个数组形参的方法:

public static void test1(int[] ints){

}

定义可变个数形参方法:

可变个数形参数的方法与本类中方法名相同,参数类型也相同的数组之间不构成重载。换句话说。二者不能共存,即:void show(String…strings)和void show(String[]strings)不能共存

  • 可变个数形参的方法的形参中,必须声明在末尾
  • 可变个数形参的方法的形参中,最多只能声明一个可变形参

代码:

package test;

public class Test {
    public static void main(String[] args) {
        test1("1","一","2","二");
    }

    public static void test1(String...strings){
    	//strings被当做数组处理
        for (int i = 0; i < strings.length; i++) {
        	//使用for循环遍历输出
            System.out.println(strings[i]);
        }
    }
    package test;

public class Test {
    public static void main(String[] args) {
        test1("1","一","2","二");
        System.out.println("---");
        test2(999,"123","345");
    }

    public static void test1(String...strings){
        for (int i = 0; i < strings.length; i++) {
            System.out.println(strings[i]);
        }
    }
//需要注意的是一个方法只能定义一个长度可变的形参,长度可变的形参只能处于形参列表的最后
//比如test2()方法中的参数不能为(String...string,int a),String...strings只能处于形参列表的最后
    public static void test2(int a,String...strings){
        System.out.println(a);
        for (int i = 0; i < strings.length; i++) {
            System.out.println(strings[i]);
        }
    }
}

}

结果:
在这里插入图片描述

Object…objects

如果设置为Object...objects,就没有类型限制,因为所有的类型默认继承object。

代码:

package test;

public class Test {
    public static void main(String[] args) {
        test1(1,"2",'a',22.22);//任意传入int,string,char,double类型
    }

    public static void test1(Object...objects){
        for (int i = 0; i < objects.length; i++) {
            System.out.println(objects[i]);
        }
    }
}

结果:
在这里插入图片描述


“ . ”前后的空白字符存亡问题

根据J2SE 1.5的语法,在“…”前面的空白字符是可有可无的。这样就有在“…”前面添加空白字符(形如“Object … args”)和在“…”前面不加空白字符(形如“Object… args”)的两种写法。因为目前和J2SE 1.5相配合的Java Code Conventions还没有正式发布,所以无法知道究竟哪一种写法比较正统。不过,考虑到数组参数也有“Object [] args”和“Object[] args”两种书写方式,而正统的写法是不在“[]”前添加空白字符,似乎采取不加空白的“Object… args”的写法在整体上更协调一些。

以下几种方式都可以正常运行:

  1. “ . ”前后都不加空格:
public static void test1(int...ints){

}
  1. “ . ”前面加空格:
public static void test1(int     ...ints){

}
  1. “ . ”后面加空格:
public static void test1(int...     ints){

}
  1. “ . ”前后都加空格:
public static void test1(int     ...     ints){

}

注意:虽然空格可以随意写,但是“ . ” 只能写上3个,而且必须是连在一起的3个"...",否则就会报错

以上是关于Java定义参数个数可变的方法:Object...objects的主要内容,如果未能解决你的问题,请参考以下文章

Java 可变参数列表

java 可变参数

java-可变参数

java-可变参数

java可变参数

Java中可变参数