`

Java不定参数Object… obj说明

阅读更多

【转自: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;@de6ced
 1
 2
 ----------[Ljava.lang.String;@c17164
 A
 ----------[Ljava.lang.String;@1fb8ee3
 O
 P
 ----------[Ljava.lang.String;@61de33
 ----------null
 =========null

 

4,断点调试后发现正是想要的东西。开心吧 ~。=

小结:

1,String… args 传参方式,为调用前的准备省了许多气力;

2,一个方法里,只能有一个”…”这样的可变参数,而且置于最后(方法重载匹配策略原因);

3,一个方法的参数很难考虑完整或者组内相同类型参数很多,采用此方法,可使代码更加优雅,同时,修改时只需改动实现类即可。

分享到:
评论

相关推荐

    java 1.5的新特性

    可变参数允许方法接受不定数量的参数,最后一个参数可以是类型后跟三个点(...)表示。这使得编写接受任意数量参数的方法变得简单,如打印多个对象的例子: ```java public void write(Object... objs) { for ...

    最新Java面试题

    - **`java.lang.Object`类的六个常用方法**:`toString()`、`equals(Object obj)`、`hashCode()`、`clone()`、`wait()`、`notify()`。 - **权限修饰符的区别**:`private`、`默认`、`protected`、`public`分别表示...

    韩顺平 java基础加强笔记整理

    - 允许方法接受不定数量的参数,提高了代码灵活性。 - 示例:`public void printAll(Object... objects) { ... }`。 - **for 循环增强** - 改进后的 for 循环简化了遍历集合的过程。 - 示例:`for (Object o : ...

    jdk1.5.0_12源代码

    在`java.lang.reflect.Method`的源代码中,`invoke(Object obj, Object... args)`方法就使用了变长参数,这使得调用方法时可以传入任意数量的参数。 5. **其他特性**: 除了上述核心改变,JDK1.5.0_12还包括增强的...

    J2ee入门之课堂笔记

    引入泛型后,Java实现了类型安全的参数化类型,即可以创建具有类型参数的类、接口和方法。这使得在编译阶段就可以检测到类型错误,避免了运行时可能出现的`ClassCastException`。 例如,在没有泛型的情况下,我们...

    jdk1.5 1.6 1.7的新特征总结

    可变参数允许一个方法接收不定数量的参数,只需在参数列表的末尾加上`...`。这使得编写接受任意数量参数的方法变得更加简单。例如: ```java public void write(Object... objs) { for (Object obj : objs) { ...

    javascript笔试题目附答案@20081025_jb51.net

    一、单选题 1、以下哪条语句会产生运行错误:(A) A.var obj = ... null instanceof Object B. null === undefined C. null == undefined D. NaN == NaN 二、不定项选择题 4、请选择对javascript理解有误的:(ABCD) A.

    javascript 的面试题

    #### 二、不定项选择题解析 **4. 请选择对javascript理解有误的** - **选项分析**: - A. `JScript是javascript的简称` 错误。JScript是Microsoft的JavaScript实现。 - B. `javascript是网景公司开发的一种Java...

    ruby初学者教程(对初学者很有帮助)

    允许方法接受不定数量的参数。 ```ruby def add(*args) args.sum end ``` **7.3 块调用** 可以在方法中调用传入的代码块。 ```ruby def with_block(&block) block.call end with_block { puts "Called from ...

    百度校园招聘笔试题-WEB前端工程师-电子科技大学.pdf

    clone[key] = typeof obj[key] === 'object' ? deepClone(obj[key]) : obj[key]; } } return clone; } ``` 【圆角框HTML+CSS】 使用CSS3的`border-radius`属性创建圆角框,但因高度不定,可能需要使用百分比...

    JavaScript面试题汇总,内含答案

    #### 二、不定项选择题知识点 **4. JavaScript的理解误区** - **选项解析:** - A. `JScript`是`JavaScript`的简称:错误,`JScript`是微软实现ECMAScript规范的一个版本,而`JavaScript`是由Netscape和Sun ...

    javascript试题及答案推荐文档.doc

    #### 二、不定项选择题解析 **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,在...

    javaScript面试精选

    - **选项B**: JavaScript并非简化Java的开发难度而设计,而是由网景公司的Brendan Eich独立设计的一种脚本语言。 - **选项C**: Firefox和IE浏览器存在兼容性问题的主要原因是它们对DOM和CSS的支持有所不同,而不是对...

    javascript的经典面试题汇总

    ### 二、不定项选择题 #### 4. 请选择对JavaScript理解有误的: - **选项A**: `JScript是javascript的简称` - **解析**:实际上,JScript是Microsoft的JavaScript实现的名称,而不是JavaScript的简称。 - **选项...

Global site tag (gtag.js) - Google Analytics