Java可选参数

本文探讨了Java中处理可选方法参数的各种方法,包括@Nullable注解、空对象模式、方法重载、参数对象模式和建造者模式。此外,还讨论了Java可选参数的反模式,如使用Map、Java变量和Optional作为方法参数的缺点。文章强调了可读性和内存使用在设计API时的重要性,并引用了Java语言设计师的观点,指出Optional更适合用于方法结果而非参数。
摘要由CSDN通过智能技术生成

在Java类中设计方法时,某些参数对于其执行而言可能是可选的。 无论是在DTO,胖模型域对象还是简单的无状态服务类中,可选方法参数都是常见的。

从本文中, 您将学习如何在Java中处理可选参数 。 我们将专注于常规方法,带有可选字段的类构造函数,并快速查看所讨论主题的不良做法。 我们将停下来看一下Java 8 Optional,并评估它是否符合我们的需求。

让我们开始吧。

1.可选方法参数

您可以通过几种不同的方法来处理Java可选参数。 我将引导您从最简单到更复杂。

@Nullable注解

为什么只是不传递null? 这是一个简单的解决方案,不需要任何额外的工作。 您没有任何需要作为方法参数之一的对象吗? 没问题。 只需传递null即可,编译器很高兴。

这里的问题是可读性。 调用方法的程序员如何知道他是否可以安全地传递null? 对于哪些参数可以接受空值,哪些是必需的?

为了清楚表明null是有效输入,可以使用@Nullable批注。

User createUser(String name, @Nullable Email email) {
   // ...
}

您不同意此方法声明是不言自明的吗?

可选参数

尽管很简单,但是null传递方法的问题在于它很容易失控。 团队可能会Swift开始过度使用它,并使代码库难以维护,并带有大量的空检查条件

不过,还有其他选择。

可选清单

代替null,我们有时可以创建一个空的类表示形式。 考虑一下Java集合。 如果方法接受列表或映射,则永远不要使用null作为输入。

空集合总是比空集合好,因为在大多数情况下,不需要任何特殊处理。

您可能想知道为什么要浪费内存来创建空集合。 毕竟,null不会花费您任何费用。

您的怀疑是有道理的。 幸运的是,有一个简单的解决方案。

每当需要空的代表时,就不应创建集合的新实例。 在代码库中重复使用同一实例。

你知道吗? Java已经具有您可以使用的所有集合的空实例。 您可以在Collections实用程序类中找到它们

User createUser(String name, List<Rights> rights) {
   // ...
}
import java.util.Collections;
// ...
create("bob", Collections.emptyList());

空对象模式

空集合的概念也适用于其他类。 空集合只是具有零元素的常规集合。 同样,您可以考虑应用程序中的其他对象。

Null对象是表示缺失值的类的特殊实例。 如果某些方法期望将对象作为参数,则始终可以传递Null对象表示形式,而不必担心它将在运行时导致意外的异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值