近来偶卖啦项目刚刚接手,由于spring MVC的框架与之前公司用到的框架构造处理方式有点差异,所以花费了一些时间去检代码。偶然看到了这种 String… 的写法,由于很少遇到过这种写法,一般在项目流程中都是明确定义的。所以,查看了一番它的具体使用方法。
1 2 3 4 5 6 7 |
public PropertiesLoader(String... resourcesPaths) { properties = loadProperties(resourcesPaths); } public Properties getProperties() { return properties; } |
这是读取属性文件的工具类,由于属性文件可能有多个,所以参数传入的时候使用的可变参数。
首先这是jdk1.5之后的新特性,我们叫它为可变参数,即 varargs 。之前我们定义可变参数是采用String[] args的方法来声明。jdk1.5之后有了更加简便的方式。
事实上String[] args 和 String… args 本质上不没有什么区别,String… args 最后还是转化成String[] args 来做的,只是String… args这种形式在应用上更加的灵活和简便。
例如有下面的两个方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public static void callMe1(String[] args) { System.out.println(args.getClass() == String[].class); for(String s : args) { System.out.println(s); } } public static void callMe2(String... args) { System.out.println(args.getClass() == String[].class); for(String s : args) { System.out.println(s); } } |
他们可以这样子被调用:
1 2 3 |
callMe1(new String[] {"a", "b", "c"}); callMe2("a", "b", "c"); callMe2(new String[] {"a", "b", "c"}); |
但是不能:
1 |
callMe1("a", "b", "c"); |
就是String… args定义方法的灵活之处。并且当一个方法定义中有String… args形参时,实参传递的参数个数可以是少于最大个数的任意个,可以不传参数。
但是这样子定义在方便的同时也是要付出一定的代价的,那就是String… args只能定义在形参的最后一个参数,而String[] args就没有这样的限制了。所以我们在定义的时候也就各取所需了。
转载请注明:似水流年 » java可变参数String…的定义
如果觉得文章还不错,欢迎打赏