【转自:http://blog.sina.com.cn/s/blog_6d9ecdef0100nyxv.html】
简述:
java中方法重载可以实现参数不同自动匹配对应方法。但现实中也存在这种问题。普通传参对于形如下面的方法,却显得臃肿而失优雅。
Map getRealLine( int left, int top String color)//others method
Map getRealLine( int left, int right, int top , int bottom, String color)Map getRealLine( int left, int right, int top , int bottom, String color, String rgb)Map getRealLine( int left, int right, int top , int bottom, String color, String rgb, String hh)Map getRealLine( int left, int right, int top , int bottom, String color, String rgb, String hh, String flowLine)
引导:
1,正如上述例子,假设所有的情况都包含了。突然有一天,绘制图线功能扩展了,还可以给定点的名称String title。这下,我们又要添加一系列的方法。
注:可能有高手会说,为什么不给一个方法,里面参数是全的(最大化参数)。如果不给的时候置0,或者置null。对这一说法,建议质疑一下JDK中的一些类,定有所获。
2,假设如果有一种机制,可以如下来定义,将为带来方便。
Map getRealLine( int[] posiontElements, String[] descriptions)
同时在使用时这样调用他:
//备参
int[] intArr = new int[]{"1", "2", "3", "4"};String[] strArr = new String[]{"read", "#994e8a"};//调用
this.obj.getRealLine( intArr , strArr );
3,仅仅如此,那不就是采用数组传参了。实践中我们发现每次用数组的时候,都有个准备参数的过程,一般情况下,又只用一组参数中的一个,比方说color。那么每次创建数组、初始化数组,传参,显示很繁锁。比较优雅的作法是,传进去的参数都自动转为数组形式。这样,在调用方法的时候,留白、置空、单串、多串、数组,都可以被接收,可以大大减轻重复准备数据的体力劳动。测试代码如下,通过这些代码,能对“String… args”有个大体的了解。
public class StrParamTest {public static void main(String[] args) {String[] strings = new String[]{"1","2"};StrParamTest.sayHi(strings);StrParamTest.sayHi("A");
StrParamTest.sayHi("O", "P");StrParamTest.sayHi();StrParamTest.sayHi(null);}private static void sayHi( String... strings ){System.out.println("----------" + strings);
if ( strings != null ) {
for (String string : strings) {
System.out.println(string);}}else {
System.out.println("=========null");
}}}
结果如下:
----------[Ljava.lang.String;@de6ced12----------[Ljava.lang.String;@c17164A----------[Ljava.lang.String;@1fb8ee3OP----------[Ljava.lang.String;@61de33----------null=========null
4,断点调试后发现正是想要的东西。开心吧 ~。=
小结:
1,String… args 传参方式,为调用前的准备省了许多气力;
2,一个方法里,只能有一个”…”这样的可变参数,而且置于最后(方法重载匹配策略原因);
3,一个方法的参数很难考虑完整或者组内相同类型参数很多,采用此方法,可使代码更加优雅,同时,修改时只需改动实现类即可。
相关推荐
可变参数允许方法接受不定数量的参数,最后一个参数可以是类型后跟三个点(...)表示。这使得编写接受任意数量参数的方法变得简单,如打印多个对象的例子: ```java public void write(Object... objs) { for ...
- **`java.lang.Object`类的六个常用方法**:`toString()`、`equals(Object obj)`、`hashCode()`、`clone()`、`wait()`、`notify()`。 - **权限修饰符的区别**:`private`、`默认`、`protected`、`public`分别表示...
- 允许方法接受不定数量的参数,提高了代码灵活性。 - 示例:`public void printAll(Object... objects) { ... }`。 - **for 循环增强** - 改进后的 for 循环简化了遍历集合的过程。 - 示例:`for (Object o : ...
在`java.lang.reflect.Method`的源代码中,`invoke(Object obj, Object... args)`方法就使用了变长参数,这使得调用方法时可以传入任意数量的参数。 5. **其他特性**: 除了上述核心改变,JDK1.5.0_12还包括增强的...
引入泛型后,Java实现了类型安全的参数化类型,即可以创建具有类型参数的类、接口和方法。这使得在编译阶段就可以检测到类型错误,避免了运行时可能出现的`ClassCastException`。 例如,在没有泛型的情况下,我们...
可变参数允许一个方法接收不定数量的参数,只需在参数列表的末尾加上`...`。这使得编写接受任意数量参数的方法变得更加简单。例如: ```java public void write(Object... objs) { for (Object obj : objs) { ...
一、单选题 1、以下哪条语句会产生运行错误:(A) A.var obj = ... null instanceof Object B. null === undefined C. null == undefined D. NaN == NaN 二、不定项选择题 4、请选择对javascript理解有误的:(ABCD) A.
#### 二、不定项选择题解析 **4. 请选择对javascript理解有误的** - **选项分析**: - A. `JScript是javascript的简称` 错误。JScript是Microsoft的JavaScript实现。 - B. `javascript是网景公司开发的一种Java...
允许方法接受不定数量的参数。 ```ruby def add(*args) args.sum end ``` **7.3 块调用** 可以在方法中调用传入的代码块。 ```ruby def with_block(&block) block.call end with_block { puts "Called from ...
clone[key] = typeof obj[key] === 'object' ? deepClone(obj[key]) : obj[key]; } } return clone; } ``` 【圆角框HTML+CSS】 使用CSS3的`border-radius`属性创建圆角框,但因高度不定,可能需要使用百分比...
#### 二、不定项选择题知识点 **4. JavaScript的理解误区** - **选项解析:** - A. `JScript`是`JavaScript`的简称:错误,`JScript`是微软实现ECMAScript规范的一个版本,而`JavaScript`是由Netscape和Sun ...
#### 二、不定项选择题解析 **4. 请选择对 JavaScript 理解有误的:** 正确答案:ABCD - **选项分析:** - A. `JScript` 实际上是 Microsoft 对 JavaScript 的实现,而不是简写。 - B. JavaScript 并不是 Java ...
- **选项A**: `null instanceof Object` 返回 false,因为 `null` 不是 `Object` 的实例。 - **选项B**: `null === undefined` 返回 false,因为两者类型不同。 - **选项C**: `null == undefined` 返回 true,在...
- **选项B**: JavaScript并非简化Java的开发难度而设计,而是由网景公司的Brendan Eich独立设计的一种脚本语言。 - **选项C**: Firefox和IE浏览器存在兼容性问题的主要原因是它们对DOM和CSS的支持有所不同,而不是对...
### 二、不定项选择题 #### 4. 请选择对JavaScript理解有误的: - **选项A**: `JScript是javascript的简称` - **解析**:实际上,JScript是Microsoft的JavaScript实现的名称,而不是JavaScript的简称。 - **选项...