java - Java 方法链接 可选地基于参数
问题描述
如果第 3 方attachments
在方法中请求参数,我如何避免使用if
和中断方法链接,知道我的参数可能为空?该方法具有以下定义。
// import org.jetbrains.annotations.NotNull;
EmailBuilder withAttachments(@NotNull List<Attachment> attachments);
当附件 == null 时,我宁愿不为 .withAttachments 使用 if 条件。我知道 javascript 有方法?(),但是什么适合 java8 或更高版本?在(附件== null)的情况下,我根本不想打电话.withAttachments()
。但是,我看不到类似于 javascript 或 typescript 中的 methodA?() 的语法。
return emailBuilder()
.withSubject(email.getSubject())
.withReplyTo(replyAddresses)
.withAttachments(attachments) // This is conditional...based on attachments
.withHeader("X-showheader", email.getShowHeader());
.build();
我需要这样做吗?
EmailBuilder eb = emailBuilder()
.withSubject(email.getSubject())
.withReplyTo(replyAddresses);
if(attachments)
eb = eb.withAttachments(attachments); // This is conditional...based on attachments
eb = eb.withHeader("X-showheader", email.getHeader())
.build;
return eb;
解决方案
如果withAttachments()
不允许null
值,那么是的,您需要if (attachments != null)
.
但是,由于构建器(通常)不需要特定的方法调用顺序,您可以稍微清理一下代码。
EmailBuilder eb = emailBuilder()
.withSubject(email.getSubject())
.withReplyTo(replyAddresses)
.withHeader("X-showheader", email.getHeader());
if (attachments != null)
eb.withAttachments(attachments);
return eb.build();
推荐阅读
- javascript - 如何将子文件夹与 Flask 蓝图一起使用?
- javascript - 如何等待 sparql 请求并在 nodejs 应用程序中设置变量?
- flutter - Flutter 在服务器的子目录上运行的基本 URL 错误
- javascript - 赛普拉斯夹具 - 类型错误:无法读取未定义的属性“travelData”
- .net - 将本地目录所有文件夹和子文件夹与文件移动到 .Net Core 中的 s3 存储桶
- java - 沟通 ESP 和 STM
- azure-devops - Azure DevOps Artifact Feed 在 Visual Studio 中给出 500 错误
- sql - TypeORM:如何从响应中排除关键属性?
- python - 如何在不写入服务器的情况下从 jupyter webapp 启用数据下载?
- node.js - Typescript 扩展了 express 请求对象并将其导出