Java不定参数Object… obj 和 Object[] 的区别
2017-10-22 17:41
211 查看
【转自:http://blog.sina.com.cn/s/blog_6d9ecdef0100nyxv.html】
简述:
java中方法重载可以实现参数不同自动匹配对应方法。但现实中也存在这种问题。普通传参对于形如下面的方法,却显得臃肿而失优雅。
引导:
1,正如上述例子,假设所有的情况都包含了。突然有一天,绘制图线功能扩展了,还可以给定点的名称Stringtitle。这下,我们又要添加一系列的方法。
注:可能有高手会说,为什么不给一个方法,里面参数是全的(最大化参数)。如果不给的时候置0,或者置null。对这一说法,建议质疑一下JDK中的一些类,定有所获。
2,假设如果有一种机制,可以如下来定义,将为带来方便。
同时在使用时这样调用他:
3,仅仅如此,那不就是采用数组传参了。实践中我们发现每次用数组的时候,都有个准备参数的过程,一般情况下,又只用一组参数中的一个,比方说color。那么每次创建数组、初始化数组,传参,显示很繁锁。比较优雅的作法是,传进去的参数都自动转为数组形式。这样,在调用方法的时候,留白、置空、单串、多串、数组,都可以被接收,可以大大减轻重复准备数据的体力劳动。测试代码如下,通过这些代码,能对“String…args”有个大体的了解。
结果如下:
4,断点调试后发现正是想要的东西。开心吧~。=
小结:
1,String…args传参方式,为调用前的准备省了许多气力;
2,一个方法里,只能有一个”…”这样的可变参数,而且置于最后(方法重载匹配策略原因);
3,一个方法的参数很难考虑完整或者组内相同类型参数很多,采用此方法,可使代码更加优雅,同时,修改时只需改动实现类即可。
简述:
java中方法重载可以实现参数不同自动匹配对应方法。但现实中也存在这种问题。普通传参对于形如下面的方法,却显得臃肿而失优雅。
MapgetRealLine(intleft,inttopStringcolor)
//othersmethod
MapgetRealLine(intleft,intright,inttop,intbottom,Stringcolor)
MapgetRealLine(intleft,intright,inttop,intbottom,Stringcolor,Stringrgb)
MapgetRealLine(intleft,intright,inttop,intbottom,Stringcolor,Stringrgb,Stringhh)
MapgetRealLine(intleft,intright,inttop,intbottom,Stringcolor,Stringrgb,Stringhh,StringflowLine)
引导:
1,正如上述例子,假设所有的情况都包含了。突然有一天,绘制图线功能扩展了,还可以给定点的名称Stringtitle。这下,我们又要添加一系列的方法。
注:可能有高手会说,为什么不给一个方法,里面参数是全的(最大化参数)。如果不给的时候置0,或者置null。对这一说法,建议质疑一下JDK中的一些类,定有所获。
2,假设如果有一种机制,可以如下来定义,将为带来方便。
MapgetRealLine(int[]posiontElements,String[]descriptions)
同时在使用时这样调用他:
//备参
int[]intArr=newint[]{"1","2","3","4"};
String[]strArr=newString[]{"read","#994e8a"};
//调用
this.obj.getRealLine(intArr,strArr);
3,仅仅如此,那不就是采用数组传参了。实践中我们发现每次用数组的时候,都有个准备参数的过程,一般情况下,又只用一组参数中的一个,比方说color。那么每次创建数组、初始化数组,传参,显示很繁锁。比较优雅的作法是,传进去的参数都自动转为数组形式。这样,在调用方法的时候,留白、置空、单串、多串、数组,都可以被接收,可以大大减轻重复准备数据的体力劳动。测试代码如下,通过这些代码,能对“String…args”有个大体的了解。
publicclassStrParamTest{
publicstaticvoidmain(String[]args){
String[]strings=newString[]{"1","2"};
StrParamTest.sayHi(strings);
StrParamTest.sayHi("A");
StrParamTest.sayHi("O","P");
StrParamTest.sayHi();
StrParamTest.sayHi(null);
}
privatestaticvoidsayHi(String...strings){
System.out.println("----------"+strings);
if(strings!=null){
for(Stringstring: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不定参数Object… obj 和 Object[] 的区别
- Java不定参数Object… obj
- Java不定参数Object… obj说明
- Java不定参数Object… obj说明 .
- Java不定参数Object… obj说明 .
- Java不定参数Object… obj说明
- Java的不定参数(eg:Object...)(转)
- JAVA基础知识回顾(基本数据类型,switch参数,equals与==的区别,Object有哪些公用方法)-1
- Java不定参数Object… obj说明
- 测试JAVA的不定长参数方法add(int... a)的具体使用
- xml读取.sax解析方式 使用于Android 和java中 ,代码是java的, 在Android中只需要 区别监听类中的参数(localName,qName),相反的,java中使用qname 为节点的名称;
- Java 反射 不定参数bug
- JAVA不定参数探秘
- 在java代码里写Map<String, ?>和Map<String, Object>都是可以用的,他们两个有什么区别?
- java 不定参数使用示例
- java不定长参数的简单使用
- jquery ajax 用 data 和 headers 向 java RESTful 传递参数区别
- 跟学韩老师学习java-servlet篇之三printwriter与outputStream区别、sendRedirect传参数、中文乱码
- Java不定参数
- Java函数的不定参数