JDK 8中几乎命名的方法参数

有时在Java中命名方法参数确实很不错,这看起来可能不会出现很长时间了,但是始终还有其他一些解决方法,例如使用构建器模式来获得类似的行为,这将为一点点。 在我看来,使用JDK 8中的Lambda支持可以使您获得非常接近的效果,而无需其他一些方法所需要的模板。

因此,请考虑这个简单的Facade类,该类提供了带有可变参数列表的方法。 请注意,该方法带有一个Consumer对象,这是我们稍后将要使用Lambda调用的方法。

package client;import java.util.function.Consumer;public class Facade {public static void invoke(Consumer<Parameter> op) {Parameter p = new Parameter();op.accept(new Parameter());invoke(p);        }public static void invoke(Parameter p) {// Defensive copy and validatep = p.clone();p.validate();// ...}public static class Parameter implements Cloneable {public String value1, value2, value3;public Parameter validate() {// ...return this;}public Parameter clone() {// We can use vanilla clone here, for more complicated mutable objects// you might need to perform a deeper copytry {return (Parameter) super.clone();} catch (CloneNotSupportedException e) {throw new RuntimeException(e);}}}}

因此,一旦有了适当的设置,就可以使用Lambda表示法调用您认为合适的参数数量的invoke方法:

...
{public static void main(String[] args) {// Single parameter versionFacade.invoke(p ->  p.value1="x" );// Multiple parameter versionFacade.invoke(p -> { p.value1="x"; p.value2="y";});}
}

当然,您的鹰眼将意识到,使用早期的JDK,相同的模式(当然要减去Consumer方法)。 考虑到那里有大量的Java开发人员,可能已经有人发明了这种模式。 但是你永远不知道,如果不写下来,那一切就不会发生。

...
{public static void main(String[] args) {// Using an anonymous inner class pre JDK 8Facade.invoke(new Parameter() {{value1 = "x";value2 = "y";}});}
}

参考: 在我们的JCG合作伙伴 Gerard Davison的博客博客中,JDK 8中几乎命名的方法参数 。

翻译自: https://www.javacodegeeks.com/2013/08/almost-named-method-arguments-in-jdk-8.html

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

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

相关文章

深入解析jQuery中的延时对象的概念

首先我们需要明白延时对象有什么用&#xff1f;第一个作用&#xff0c;解决时序以及动态添加执行函数的问题。function a(){alert(1)};function b(){alert(2)};function c(){alert(3)};a();setTimeout(function(){b();},0);c();很明显函数执行顺序是a->c->b,而不是按照函…

c mysql5.7_CentOS7下MySQL5.7的三种安装方式详解

操作系统环境&#xff1a;CentOS 7.4最小化安装[rootnode3 src]# cat /etc/redhat-releaseCentOS Linux release 7.4.1708 (Core)[rootnode3 ~]# uname -r3.10.0-693.5.2.el7.x86_64[rootnode3 ~]#安装版本为&#xff1a;MySQL 5.7.20一、编译安装MySQL5.71、下载源码包[rootno…

Struts2 学习之小白开始

Struts2 基础知识学习总结 Struts2 概述&#xff1a;Struts2 是一个用来开发 MVC 应用程序的框架&#xff0c;他提供了 Web 应用程序开发过程中的一些常见问题的解决方案&#xff0c;比如对于用户输入信息合法性的验证&#xff0c;统一的布局&#xff0c;国际化等&#xff0c;既…

机器学习的数学基础 - 信息论

机器学习的数学基础 - 信息论 信息论 信息论本来是通信中的概念&#xff0c;但是其核心思想“熵”在机器学习中也得到了广泛的应用。比如决策树模型ID3&#xff0c;C4.5中是利用信息增益来划分特征而生成一颗决策树的&#xff0c;而信息增益就是基于这里所说的熵。所以它的重要…

了解ElasticSearch分析器

令人遗憾的是&#xff0c;许多早期的互联网啤酒配方不一定采用易于消化的格式。 也就是说&#xff0c;这些食谱是通常在电子邮件或论坛帖子中最初组成的非结构化的方向和成分混合列表。 因此&#xff0c;尽管很难轻松地将这些配方放入传统的数据存储中&#xff08;表面上看是为…

c++简单程序设计-2

1.验证性实验部分①函数声明和函数定义各自的作用及二者的区别&#xff1a;函数声明就是调用函数之前提示一下有这个函数函数定义就是写一个函数②什么是形参&#xff1f;什么是实参&#xff1f;函数参数和返回值在函数中起到什么作用&#xff1f;函数定义时写的参数叫做形参&a…

java 同步的方法_关于Java中的同步方法

我有一个关于Java中方法同步的问题.考虑一个具有3个同步方法的类.class MyClass{public synchronized void methodA(){ ... }public synchronized void methodB(){ ... }public synchronized void methodC(){ ... }}考虑myObject,myClass的一个实例.以下内容哪些是对的&#xf…

jQuery获取隐藏域和radio单项框的值

获得只有Name的隐藏Input的值$("input[typehidden][name隐藏Input的名称]").val() 或 $("input[name隐藏Input的名称]:hidden").val()radio设值$("input[typeradio][value值]").attr("checked",true);eg.$("input[typeradio][v…

Linux虚机安装配置Tomcat

d第一步&#xff1a;下载Tomcat包&#xff0c;网址http://tomcat.apache.org/ 选择tar.gz包下载&#xff0c;并传到虚机中 第二步&#xff1a;解压下载好的Tomcat包 命令&#xff1a;tar -zxvf apache-tomcat-8.0.53.tar.gz 第三步&#xff1a;配置环境变量 进入到Tomcat下bin包…

Java Comparable接口的陷阱

Java Comparable接口提供了一种对实现该接口的类进行自然排序的方法。 自然顺序对标量和其他非常简单的对象有意义&#xff0c;但是当我们使用面向业务的领域对象时&#xff0c;自然顺序就变得更加复杂。 从业务经理的角度来看&#xff0c;交易对象的自然顺序可以是交易的价值&…

mysql 创建视图

CREATE VIEW v_image_org_user_album AS--创建视图并命名v_image_org_user_album SELECT --先开from中表的命名 a.id AS imgid,--将a表中的id命名为新的表&#xff08;视图&#xff09;中的imgid字段&#xff0c;剩下的都一样&#xff0c;就是将之前的字段重新命名到…

jQuery.ajaxPrefilter()函数的使用

jQuery.ajaxPrefilter( [dataTypes ], handler(options, originalOptions, jqXHR) )返回: undefined 描述: 在每个请求之前被发送和 $.ajax()处理它们前处理&#xff0c;设置自定义Ajax选项或修改现有选项。 添加的版本: 1.5jQuery.ajaxPrefilter( [dataTypes ], handler(optio…

linux php自动执行_linux下实现定时执行php脚本

在linux中输入命令复制代码 代码如下:crontab -e然后使用vim的命令编辑打开的文件&#xff0c;输入复制代码 代码如下:0 * * * * /usr/bin/php -f /home/userxxx/update.php保存&#xff0c;退出&#xff0c;好了&#xff0c;现在系统会在每个0点自动执行update.php脚本&#x…

Nginx安装及配置详解

nginx概述 nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器&#xff1b;同时也是一个IMAP、POP3、SMTP代理服务器&#xff1b;nginx可以作为一个HTTP服务器进行网站的发布处理&#xff0c;另外nginx可以作为反向代理进行负载均衡的实现。 这里主要通过三个方面…

Gradle:我们需要另一个构建工具吗?

在Java开发的早期&#xff0c;我们要么没有太多的构建工具需求&#xff0c;要么就使用了其他环境中的工具。 我仍然记得构建shell脚本并创建用于开发Java的文件。 生成文件特别有趣&#xff0c;因为这是一个在设计时就没有考虑Java的工具。 迁移到不同的操作系统环境也很困难。…

servlet简单概括总结

最近在看java web的相关内容&#xff0c;不管是整体还是细节&#xff0c;要学习的知识有很多&#xff0c;所以有一个好的学习体系非常重要。在阅读学习一些博客和教程中关于servlet的内容后&#xff0c;现将知识体系和自己的总结体会进行梳理&#xff0c;希望在更深入理解的同时…

jquery学习之-查找父元素方法parent() parents() closest()的区别

parent()、parents()与closest()方法两两之间有类似又有不同&#xff0c;本篇简短的区分一下这三个方法。通过本篇内容&#xff0c;大家将会在以后使用.parent()、parents()和closest()时不会显得无从下手。 我们直接看例子来来说明一下这三个方法的使用区别&#xff1a; <u…

二叉树的递归遍历与复制

1 #include <iostream>2 3 //定义树的数据结构4 struct BiTNode5 {6 int data;7 struct BiTNode *lchild, *rchild;8 };9 10 typedef struct BiTNode BiTNode;11 typedef struct BiTNode* BiTree;12 13 14 //前序遍历15 void preOrder(BiTNode *root)16 {17…

php超强后门在任意位置创建文件,php大马:.user.ini文件构成的超强PHP后门

这个估计很多同学看了不屑&#xff0c;认为是烂大街的东西了&#xff1a;那么我来个新的吧&#xff1a;。它比用的更广&#xff0c;不管是nginx/apache/IIS&#xff0c;只要是以fastcgi运行的php都可以用这个方法。我的nginx服务器全部是fpm/fastcgi&#xff0c;我的IIS php5.3…

CSS3-字体渐变色

示例&#xff1a;Maugers Blog <!DOCTYPE HTML> <html> <head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><title>Maugers Blog</title><style type"text/css…