首页 > 解决方案 > 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;

标签: javaoptionalmethod-chainingnotnull

解决方案


如果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();

推荐阅读