使用精确的Java方法参数

了解如何在Java应用程序中选择正确的方法参数类型并获得更健壮和更短的代码。

我们Java开发人员通常有一个使用方法参数的坏习惯,即不考虑实际需要什么,而只是选择我们习惯的,可用的或首先想到的东西。 考虑以下代表性示例:

private static String poem(Map<Integer, String> numberToWord) {return new StringBuilder().append("There can be only ").append(numberToWord.get(1)).append(" of you.\n").append("Harts are better of when there are ").append(numberToWord.get(2)).append(" of them together.\n").append("These ").append(numberToWord.get(3)).append(" red roses are a symbol of my love to you.\n").toString();}

使用上面的方法时,我们提供了一个将数字转换为字符串的Map。 例如,我们可能提供以下地图:

Map<Integer, String> englishMap = new HashMap<>();englishMap.put(1, "one");englishMap.put(2, "two");englishMap.put(3, "three");

当我们用englishMap调用我们的诗歌方法时,该方法将产生以下输出:

There can be only one of you.
Harts are better of when there are two of them together.
These three red roses are a symbol of my love to you.

听起来不错。 现在,假设您的重要人物是计算机迷,并且想为自己的诗增添趣味并给人留下深刻的印象,那么这就是要走的路:

Map<Integer, String> nerdMap = new HashMap<>();nerdMap.put(1, "1");nerdMap.put(2, "10");nerdMap.put(3, "11");

如果现在将nerdMap提交给poem方法,它将产生以下诗:

There can be only 1 of you.
Harts are better of when there are 10 of them together.
These 11 red roses are a symbol of my love to you.

与所有诗歌一样,很难判断哪首诗比另一首更浪漫,但我当然有自己的看法。

问题所在

上面的解决方案有几个问题:

首先,作为外部呼叫者,我们不能确定poem方法不会更改我们提供的Map。 毕竟,我们提供了一张地图,没有什么阻止接收者对地图做任何可能的事情,甚至完全清除整个地图。 当然可以通过使用Collections.unmodifiableMap()方法包装Map或提供现有地图的副本来避免此副本,从而避免该副本。

其次,当我们只需要将整数转换为String的内容时,我们就不得不使用Map。 在某些情况下,这可能会创建不必要的代码。 回想我们的nerdMap,可以使用Integer :: toBinaryString轻松计算地图中的值,而无需手动映射它们。

解决方案

我们应该努力准确地提供在任何给定情况下所需的内容,而不是更多。 在我们的示例中,我们应该修改poem方法以采用从整数到字符串的函数。 在调用方上如何实现此功能的重要性较低,它可以是映射或函数,也可以是代码或其他东西。 首先,这是应该如何做:

private static String poem(IntFunction<String> numberToWord) {return new StringBuilder().append("There can be only ").append(numberToWord.apply(1)).append(" of you.\n").append("Harts are better of when there are ").append(numberToWord.apply(2)).append(" of them together.\n").append("These ").append(numberToWord.apply(3)).append(" red roses are a symbol of my love to you.\n").toString();}

如果我们想将poem方法与Map一起使用,则可以这样简单地调用它:

// Expose only the Map::get methodSystem.out.println(poem(englishMap::get));

如果我们想像书呆子诗一样计算值,那么我们可以做得更简单:

System.out.println(poem(Integer::toBinaryString));

哎呀,我们甚至可以为另一种患有双重人格障碍的人写一首诗:

System.out.println(poem(no -> englishMap.getOrDefault(no + 1, Integer.toString(no + 1))));

这将产生以下诗歌:

There can be only two of you.
Harts are better of when there are three of them together.
These 4 red roses are a symbol of my love to you.

注意您的方法参数!

翻译自: https://www.javacodegeeks.com/2017/06/use-precise-java-method-parameters.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349766.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android external storage

File sdCard Environment.getExternalStorageDirectory(); File directory_pictures new File(sdCard, "Pictures"); Log.i(TAG,"directory_pictures"directory_pictures); 存储在external storage 这类文件不应该存在SD卡的根目录下&#xff0c;而应该存…

EnjoyingSoft之Mule ESB开发教程第六篇:Data Transform - 数据转换

目录 1. 数据转换概念2. 数据智能感知 - DataSense3. 简单数据转换组件3.1 Object to JSON3.2 JSON to XML3.3 JSON to Object3.4 XML to JSON4. 企业版的DataWeave Transformer(可视化高级数据转换器)5. 社区版的InfoMapper(自研的可视化数据转换器)本篇主要介绍在Mule ESB中使…

反射和内省_单例设计模式–内省和最佳实践

反射和内省定义&#xff1a; Singleton是“ 四人帮”设计模式的一部分&#xff0c;它属于创新设计模式。 在本文中&#xff0c;我们将更深入地研究Singleton模式的用法。 就建模而言&#xff0c;它是最简单的设计模式之一&#xff0c;但另一方面&#xff0c;就使用的复杂性而言…

福利预告,跳一跳助手即将发布,您不知道还有这些...

福利预告&#xff0c;跳一跳助手即将来临 一周后&#xff0c;即2月9号正式发布 跳一跳助手&#xff0c;免费免费免费提供&#xff01; 透露一下 跳一跳助手的界面是这样滴&#xff1a; 这工具有啥用&#xff1f; 举个栗子&#xff1a; 花城君用该工具&#xff0c;不小心就玩到…

Redis Client Lettuce 5 GA发布

经过13个月的开发阶段和208张已解决的故障单&#xff0c;我很高兴宣布Lettuce 5.0全面上市。 这是一个主要发行版&#xff0c;带有一些重大更改&#xff0c;新的有趣功能以及Java 9兼容性。 从Maven Central获取发布 <dependency><groupId>io.lettuce</groupI…

NOIP模拟测试14「旋转子段·走格子·柱状图」

旋转子段 连60分都没想&#xff0c;考试一直肝t3&#xff0c;t2&#xff0c;没想到t1最简单 我一直以为t1很难&#xff0c;看了题解发现也就那样 题解 性质1 一个包含a[i]旋转区间值域范围最多为min(a[i],i)----max(a[i],i) 感性理解 举个例子,例如3 7 1 4 5 6 2 这个子段包含a…

检测域名是否到期

如果你想做一个网站&#xff0c;首先需要购买一个域名&#xff0c;与其说是购买不如说是租用&#xff0c;因为你要想使用这个域名&#xff0c;每年都需要缴纳一笔费用。既然是租用&#xff0c;所以就有期限&#xff0c;在到期前没有续费&#xff0c;则该域名会被收回&#xff0…

jax-ws cxf_走向REST:在Spring和JAX-RS(Apache CXF)中嵌入Jetty

jax-ws cxf对于服务器核心Java开发人员来说&#xff0c;向世界“展示”的唯一方法是使用API​​。 今天的帖子都是关于JAX-RS的 &#xff1a;使用Java编写和公开RESTful服务。 但是&#xff0c;我们不会使用涉及应用程序服务器&#xff0c;WAR打包以及诸如此类的传统的重量级方…

问题 1046: [编程入门]自定义函数之数字后移

题目描述有n个整数&#xff0c;使前面各数顺序向后移m个位置&#xff0c;最后m个数变成前面m个数。写一函数&#xff1a;实现以上功能&#xff0c;在主函数中输入n个数和输出调整后的n个数。输入输入数据的个数n n个整数 移动的位置m输出移动后的n个数样例输入10 1 2 3 4 5 6 7…

Reliable Multicast Programming(PGM)协议

Reliable Multicast Programming (PGM)实际通用可靠多播协议&#xff0c;在某种程度上保证多播的可靠性。是IP上层协议&#xff0c;和TCP还有UDP同级&#xff0c;工作在传输层。 在组播传输视频项目中&#xff0c;发现在网络较差的时候&#xff0c;组播传输视频性能下降迅猛&am…

P1488 肥猫的游戏

P1488 肥猫的游戏https://www.luogu.org/problem/P1488 博弈论一个三角形&#xff0c;只有三种情况&#xff1a;1邻接&#xff0c;2邻接&#xff0c;3邻接主要是2邻接的情况比较麻烦边<0,n-1>需要特判一下 #include <iostream> #include <cstdio> #include &…

使用OAuth2令牌的安全REST服务

1.简介 在本教程中&#xff0c;我们将介绍如何将Spring Security与OAuth结合使用以保护REST服务。 在演示应用程序中&#xff0c;可以使用路径模式&#xff08; / api / ** &#xff09;访问服务器上受保护的REST资源&#xff0c;以便基于该路径的请求URL映射到不同的控制器方法…

java 内联调用深度_Java中内联虚拟方法调用的性能

java 内联调用深度总览 动态编译的好处之一是它能够支持在虚拟方法代码上的广泛方法内联。 内联代码可提高性能时&#xff0c;代码仍必须检查类型&#xff08;以防由于优化而更改了类型&#xff09;或在多个可能的实现之间进行选择。 这导致了问题。 通过接口调用的方法的多个…

组件切换方式(Vue.js)

这里&#xff0c;我用一个注册登录两组件的切换实例来演示&#xff1a; 切换方式一 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8" /><title>独秀不爱秀</title> </head><body><div …

在GWT中序列化/反序列化Json

JSON和GWT 最近&#xff0c; GWT用户小组中进行了有趣的讨论 &#xff0c;涉及在客户端对JSON进行序列化/反序列化的最佳实践。 这篇文章旨在突出其重点。 到目前为止&#xff0c;在GWT中有三种将对象转换为JSON并从客户端转换回JSON的方法&#xff1a; gwt-jackson框架&#…

NOIP模拟测试15「建造城市city(插板法)·轰炸·石头剪刀布」

建造城市 题解 先思考一个简单问题 10个$toot$ 放进5间房屋&#xff0c;每个房屋至少有1个$toot$&#xff0c;方案数 思考&#xff1a;插板法&#xff0c;$10$个$toot$有$9$个缝隙&#xff0c;$5$间房屋转化为$4$个挡板&#xff0c;放在toot缝隙之间得到$C_{9}^{4}$ 10个$toot$…

弹簧和线程:TaskExecutor

在Web应用程序中使用线程并不常见&#xff0c;尤其是当您必须开发长期运行的任务时。 考虑到spring&#xff0c;我们必须格外注意并使用它已经提供的工具&#xff0c;而不是生成我们自己的线程。 我们希望线程由spring管理&#xff0c;因此能够在不产生任何影响的情况下使用应…

数位dp从会打模板到不会打模板

打了几个数位$dp$&#xff0c;发现自己除了会打模板之外没有任何长进&#xff0c;遇到非模板题依然什么都不会 那么接下来这篇文章将介绍如何打模板&#xff08;滑稽&#xff09; 假设我们要处理$l----r$ 采用记忆化搜索的方式&#xff0c;枚举$<r$每一种情况&#xff0c;枚…

javafx简单吗_JavaFX即将推出您附近的Android或iOS设备吗?

javafx简单吗已经有大新闻最近在世界上的JavaFX的关于JavaFX的是许多更多的组件开源&#xff0c;开源的广告在2012 JavaOne大会 。 在2月的开放源代码更新中 &#xff0c; Richard Bair编写了一份JavaFX项目表&#xff0c;该表在撰写本文时&#xff08;2013年2月11日&#xff0…

【webrtc】webrtc的rtp重传代码分析

pgm不太能用&#xff0c;没有想象中的可靠&#xff0c;重传机制貌似仍然使用组播重传&#xff0c;丢包率80%的网络感觉没啥改进&#xff0c;如果有所好转延迟估计也是个不小的问题。 后听说rtp也有nack机制&#xff0c;webrtc基于rtp实现了重传在一定程度上保证可靠性。 在各路…