这是好的代码和 Java 选项的使用吗
Is this Good Code and Use of Java Option
这样的代码风格和Option的使用好吗?
这似乎不对,因为方法 return 是一个泛型,但主体没有使用泛型 return。另外,'smells' 由于 IF 语句有点不好。
public Optional<MyObjectType> readData() {
MyObjectType[] myArray = // Will not be null, but maybe Size 0.
if(myArray.length > 0)
return Optional.of(myArray[0]);
return Optional.of(null);
}
在客户端我有:
public void clientCode() {
Optional<CurrencyPointData> oData = readCurrency(Currency.ADA);
if(oData.isPresent()) {
CurrencyPointData data = oData.get();
// Use data object
}
}
这似乎也没有比正常的 if(oData == null)
检查好多少。
因此,这段代码看起来很垃圾,所以我不应该使用 Optional 吗??
您的客户端代码展示了 Optional
的用途。
它鼓励代码在调用 get()
之前检查 isPresent()
,强调可能没有价值的问题,这与不使用 Optional
的情况下简单地使用 CurrencyPointData
不同然后未定义 return 值是否可以是 null
。当然,你可以文档是否方法可以returnnull
,但这在代码中并不明显,我们都知道人们很少详细阅读文档。
对于 Optional
,您明确表示该值可能缺失。
这就是 为什么 Optional
比简单的 null
检查更好的原因。
考虑不要在其余代码中使用 orElse 携带 Optional。
此外,您可以避免使用 Option 'if',它使您的代码更清晰。
public void clientCode() {
Optional<CurrencyPointData> oData = readCurrency(Currency.ADA);
CurrencyPointData data = oData.orElse(new CurrencyPointData(...));
}
可选的 null 是不好的。使用 Optional.empty()
.
虽然 Optional
强制您在访问结果之前处理 null case
,但使用 isPresent()
没有任何意义。使用 null 会产生相同的代码,但没有不必要的 Optional 包装器。 Optional 为您提供了 "unwrap" 结果值的更好替代方案。
如果缺少值,您可以使用 orElse()
作为默认值。
用orElseGet()
你可以计算替代值。此计算仅在 Optional 为空的情况下执行。
或者用orElseThrow()
表示没有值的操作不能继续
还有一个 ifPresent()
,当您除了将其传递给其他对象之外没有其他用处时,它很有用。
这样的代码风格和Option的使用好吗? 这似乎不对,因为方法 return 是一个泛型,但主体没有使用泛型 return。另外,'smells' 由于 IF 语句有点不好。
public Optional<MyObjectType> readData() {
MyObjectType[] myArray = // Will not be null, but maybe Size 0.
if(myArray.length > 0)
return Optional.of(myArray[0]);
return Optional.of(null);
}
在客户端我有:
public void clientCode() {
Optional<CurrencyPointData> oData = readCurrency(Currency.ADA);
if(oData.isPresent()) {
CurrencyPointData data = oData.get();
// Use data object
}
}
这似乎也没有比正常的 if(oData == null)
检查好多少。
因此,这段代码看起来很垃圾,所以我不应该使用 Optional 吗??
您的客户端代码展示了 Optional
的用途。
它鼓励代码在调用 get()
之前检查 isPresent()
,强调可能没有价值的问题,这与不使用 Optional
的情况下简单地使用 CurrencyPointData
不同然后未定义 return 值是否可以是 null
。当然,你可以文档是否方法可以returnnull
,但这在代码中并不明显,我们都知道人们很少详细阅读文档。
对于 Optional
,您明确表示该值可能缺失。
这就是 为什么 Optional
比简单的 null
检查更好的原因。
考虑不要在其余代码中使用 orElse 携带 Optional。
此外,您可以避免使用 Option 'if',它使您的代码更清晰。
public void clientCode() {
Optional<CurrencyPointData> oData = readCurrency(Currency.ADA);
CurrencyPointData data = oData.orElse(new CurrencyPointData(...));
}
可选的 null 是不好的。使用 Optional.empty()
.
虽然 Optional
强制您在访问结果之前处理 null case
,但使用 isPresent()
没有任何意义。使用 null 会产生相同的代码,但没有不必要的 Optional 包装器。 Optional 为您提供了 "unwrap" 结果值的更好替代方案。
如果缺少值,您可以使用 orElse()
作为默认值。
用orElseGet()
你可以计算替代值。此计算仅在 Optional 为空的情况下执行。
或者用orElseThrow()
表示没有值的操作不能继续
还有一个 ifPresent()
,当您除了将其传递给其他对象之外没有其他用处时,它很有用。