[转载] Java中的命名参数
参考链接: Java命名约定
创建具有许多参数的方法是一个主要的缺点。 每当需要创建这样的方法时,就在空气中闻一闻:这是代码的味道。 强化单元测试,然后进行重构。 没有借口,没有屁股。 重构! 使用构建器模式,甚至更好地使用Fluent API。 对于后者,注释处理器的影响可能会有很大帮助。
综上所述,当我们面对现实生活而不是我们在业余爱好项目中可以遵循的理想主义模式时,我们可能会迈入人生的关键时刻。 遗留下来的企业库怪物具有数以千计的参数方法,您没有权力,时间,勇气或兴趣(对您不利)来修改……操作……对其进行重构。 如果有时间,您可以将构建器创建为外观,将丑陋的API隐藏在其后。 创建构建器仍然是您甚至在编写之前就必须进行单元测试的代码(您知道:TDD),而您可能没有时间。 调用怪异方法的代码也已经存在,您只需对其进行维护即可。
您仍然可以做一些小技巧。 它可能并不完美,但是仍然有些完美。
假设有一个方法:
public void monster(String contactName, String contactId, String street, String district,
...
Long pT){
...
}
首先是在调用者的位置明智地选择局部变量。 可惜已经选择了名称,您可能不想更改它。 可能有某些原因,例如,遵循了应用程序范围的命名约定,即使您的样式不是这样,也可能有意义。 因此调用:
monster(nm, "05300" + dI, getStrt(), d, ... , z+g % 3L );
不完全是我在说的。 这就是您所拥有的,您可以使用它,也可以在代码中插入新变量:
String contactName = nm;
String contactId = "05300" + dI;
String street = getStrt();
Street district = d;
...
Long pT = z+g % 3L;
monster(contactName, contactId, street, district, ... ,pT );
或者甚至可以用Java中不常见的方式编写它,尽管完全合法:
String contactName, contactId, street, district;
...
Long pT;
monster(contactName = nm, contactId = "05300" + dI, street = getStrt(), district = d, ... ,pT = z+g % 3L );
好吃吗 依靠。 我不会在口味上争论。 如果您不喜欢那样,还有另一种方法。 您可以定义辅助和非常简单的静态方法:
static <T> T contactName(T t){ return T;}
static <T> T contactId(T t){ return T;}
static <T> T street(T t){ return T;}
static <T> T district(T t){ return T;}
...
static <T> T pT(T t){ return T;}
monster(contactName(nm), contactId("05300" + dI), street(getStrt()(, district(d), ... ,pT(z+g % 3L) );
该代码仍然很丑陋,但是在调用者处更具可读性。 你甚至可以收集静态方法为工具类或接口在Java中8的情况下,命名为喜欢with , using , to等等。 您可以将它们静态导入到您的代码中,并进行如下一些方法调用:
doSomething(using(someParameter), with(someOtherParameter), to(resultStore));
如果您回答了最后一个问题,那么所有这些都将使您感到恼: * pT是什么祝福。
( * “随便什么,您都可以用其他任何单词代替”)
翻译自: https://www.javacodegeeks.com/2014/09/named-parameters-in-java.html
[转载] Java中的命名参数相关推荐
- Java中的命名参数
创建具有许多参数的方法是一个主要的缺点. 每当需要创建这样的方法时,就在空气中闻一闻:这是代码的味道. 强化单元测试,然后进行重构. 没有借口,没有屁股. 重构! 使用构建器模式,甚至更好地使用Flu ...
- scala中命名参数函数_Scala中的命名参数和默认参数值
scala中命名参数函数 In this post, we are going to discuss the following two important concepts in Scala abo ...
- scala中命名参数函数_Scala中带有命名参数的函数
scala中命名参数函数 具有命名参数的函数 (Functions with named arguments ) A function is Scala can take multiple argum ...
- java 反射 不定参数_关于 Java 中的 不定参数
简单修改 JAVA中可以使用不定参数, 例如 public void test(String ...args){...} 这里test方法可以传入参数的情况是: 1.不使用参数,如test() 2.使 ...
- java中的方法参数
java中的方法参数 首先回顾一下程序设计语言中有关参数传递给方法的专业术语. 按值调用:表示方法接收的是调用者提供的值. 按引用调用:表示方法接收的是调用者提供的变量地址. java中总是采用按值调 ...
- JAVA中final修饰参数
1. final 修饰在变量上,说明这个变量的值不能修改 final 修饰在方法上,说明这个方法在继承后不能覆盖. final 修饰在类上,说明这个类为终态,不能被继承了. 2.final类型修饰的参 ...
- java 参数命名冲突_Java中的命名参数
java 参数命名冲突 创建具有许多参数的方法是一个主要的缺点. 每当需要创建这样的方法时,就在空气中闻一闻:这是代码的味道. 强化单元测试,然后进行重构. 没有借口,没有屁股. 重构! 使用构建器模 ...
- [转载] Java中方法不可以有默认参数
参考链接: Java中的方法 Java中的方法不可以有默认参数,只能通过重载来实现: public class ParameterDefault { /** * @param args */ publ ...
- java类的命名规范_浅谈Java中的命名规范
现代软件架构的复杂性需要协同开发完成,如何高效地协同呢? 答案是:制定一整套统一的规范. 无规矩不成方圆,无规范难以协同,比如,制订交通法规表面上是要限制行车权,实际上是保障公众的人身安全,试想如果没 ...
最新文章
- 宽字符集(unicode)说明以及转换函数
- bzoj:1666: [Usaco2006 Oct]Another Cow Number Game 奶牛的数字游戏
- esp8266 wifi模组手机一键配网,配置一次,下次重启设备后不需再进行配网
- BZOJ2329: [HNOI2011]括号修复(Splay)
- android 音量键 广播,【Android 7.0 Audio】: 按键调节音量的调用过程
- ols残差_涨知识丨OLS原理的矩阵方法很难?Just So So
- 面试精讲之面试考点及大厂真题 - 分布式专栏 11 Redis热点key大Value解决方案
- 一维稳态导热的数值计算c语言,传热传质上机实习题(参考资料C语言)
- CUDA 8.0 + VS2013 + win10 x64开发环境搭建
- winetricks启动报错:please retest in a clean 32-bit WINEPREFIX before reporting a bug解决
- [Erlang脚印 0004] gen_server
- BZOJ 1230: [Usaco2008 Nov]lites 开关灯( 线段树 )
- C++--第5课 - 新的关键字
- 叮咚智管-智慧物业管理系统
- PDF控件Aspose.Pdf 12月新版17.12发布 | 附下载
- java在线编译功能
- 华为eNSP-基本配置指令
- 表情识别android项目,Github项目推荐 | Emotion-recognition 实时表情识别
- JS打印之指定元素分页,自动插入分页符
- halcon入门之_提取遥控器字符并且写入txt文本
热门文章
- CVE-2017-10271 WebLogic XMLDecoder反序列化漏洞
- orcle mysql 查询_Oracle与Mysql的高级查询与难点sql
- java成员初始化顺序_Java成员初始化顺序
- 规培手册填写模板_9年老资料员经验分享,181套资料员模板+302页工作手册,成为优秀资料员还能提高工作效率,限时分享...
- python实现录音小程序 界面_小程序如何实现录音 播放功能
- java mongodb 插入数据_mongoDB 插入数据 用java实现
- cmos存储器中存放了_天津大学姚建铨院士,张雅婷副教授JMCC:具有宽光谱调控特性的阻变存储器...
- spark算子_Spark篇之持久化算子
- 认识计算机网络试讲稿,操作系统简介试讲教案.pdf
- android+联系服务器时间,android配置时间服务器+亚洲主要的授时服务器