创建具有许多参数的方法是一个主要的缺点。 每当需要创建这样的方法时,就在空气中闻一闻:这是代码的味道。 强化单元测试,然后进行重构。 没有借口,没有屁股。 重构! 使用构建器模式,甚至更好地使用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的情况下,命名为喜欢withusingto等等。 您可以将它们静态导入到您的代码中,并进行如下一些方法调用:

doSomething(using(someParameter), with(someOtherParameter), to(resultStore));

如果您回答了最后一个问题,那么所有这些都将使您感到恼: * pT是什么祝福。

* “随便什么,您都可以用其他任何单词代替”)

翻译自: https://www.javacodegeeks.com/2014/09/named-parameters-in-java.html

Java中的命名参数相关推荐

  1. [转载] Java中的命名参数

    参考链接: Java命名约定 创建具有许多参数的方法是一个主要的缺点. 每当需要创建这样的方法时,就在空气中闻一闻:这是代码的味道. 强化单元测试,然后进行重构. 没有借口,没有屁股. 重构! 使用构 ...

  2. scala中命名参数函数_Scala中的命名参数和默认参数值

    scala中命名参数函数 In this post, we are going to discuss the following two important concepts in Scala abo ...

  3. scala中命名参数函数_Scala中带有命名参数的函数

    scala中命名参数函数 具有命名参数的函数 (Functions with named arguments ) A function is Scala can take multiple argum ...

  4. java 反射 不定参数_关于 Java 中的 不定参数

    简单修改 JAVA中可以使用不定参数, 例如 public void test(String ...args){...} 这里test方法可以传入参数的情况是: 1.不使用参数,如test() 2.使 ...

  5. java中的方法参数

    java中的方法参数 首先回顾一下程序设计语言中有关参数传递给方法的专业术语. 按值调用:表示方法接收的是调用者提供的值. 按引用调用:表示方法接收的是调用者提供的变量地址. java中总是采用按值调 ...

  6. JAVA中final修饰参数

    1. final 修饰在变量上,说明这个变量的值不能修改 final 修饰在方法上,说明这个方法在继承后不能覆盖. final 修饰在类上,说明这个类为终态,不能被继承了. 2.final类型修饰的参 ...

  7. java 参数命名冲突_Java中的命名参数

    java 参数命名冲突 创建具有许多参数的方法是一个主要的缺点. 每当需要创建这样的方法时,就在空气中闻一闻:这是代码的味道. 强化单元测试,然后进行重构. 没有借口,没有屁股. 重构! 使用构建器模 ...

  8. java类的命名规范_浅谈Java中的命名规范

    现代软件架构的复杂性需要协同开发完成,如何高效地协同呢? 答案是:制定一整套统一的规范. 无规矩不成方圆,无规范难以协同,比如,制订交通法规表面上是要限制行车权,实际上是保障公众的人身安全,试想如果没 ...

  9. Java中可变长参数的使用及注意事项

    在Java5 中提供了变长参数(varargs),也就是在方法定义中可以使用个数不确定的参数,对于同一方法可以使用不同个数的参数调用,例如print("hello");print( ...

最新文章

  1. eclipse调试一个struts2例子时遇到的一些问题总结
  2. 利用VIM为源码添加行号
  3. 【剑指offer - C++/Java】12、数值的整数次方
  4. C++primer 第 2 章 变量和基本类型
  5. Qt值得学习吗?详解Qt的几种开发方式
  6. hdu 4430 Yukari's Birthday(二分)
  7. 为什么我突然不能启动tomcat_为什么我的Tomcat启动加载不了配置文件?
  8. sql查询id最大的一行_mysql-聚合查询
  9. NHibernate.3.0.Cookbook第三章第8节的翻译
  10. 一键刷入twrp工具_OPPORealme X 刷入原生lineage16-AOSP纯净系统完美ROOT 刷机必备
  11. 编程语言-Java-问题整理
  12. 【数据库考试】数据库期末考试试题及答案
  13. Java渐变进度条_很好看的java进度条
  14. 《因果推理原理:基础与学习算法》第一章 因果模型和统计模型
  15. 生物统计学(biostatistics)学习笔记(三)
  16. grep匹配单引号('),惰性匹配(.*?)
  17. Scala REPL的使用
  18. ue4子弹追踪与魔法子弹 逆向教程
  19. ArcGIS之修改图层要素名称
  20. js给span赋值及修改span字体颜色

热门文章

  1. Ubuntu C++ Thread Sleep
  2. java把控件跑挂了_Java代码动态修改 ConstraintLayout 内控件布局的辅助类
  3. BigDecimal类的使用
  4. jvm 启动参数设置
  5. spring(7)spring mvc 的高级技术
  6. sql 注射_只能在测试中注射吗?
  7. 无处不再的广告_我的机器人现在无处可去。 无家可归。 无服务器。
  8. jvm体系结构_JVM体系结构:JVM中的执行引擎
  9. apache camel_学习Apache Camel –实时索引推文
  10. php 系统交互 删除文件_FileSystemMap:与文件系统交互的自然方法