您的位置:首页 > 移动开发 > Objective-C

Java不定参数Object… obj 和 Object[] 的区别

2017-10-22 17:41 211 查看
【转自:http://blog.sina.com.cn/s/blog_6d9ecdef0100nyxv.html】

简述:

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,一个方法的参数很难考虑完整或者组内相同类型参数很多,采用此方法,可使代码更加优雅,同时,修改时只需改动实现类即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: