假设我有一个List<SomeObject>函数返回该对象的引用(如果可用).
SomeObject GetSomeObject(List<SomeObject>, int x){
/* Search for object in list that has a properties
with value x */
if (found)
return /* The object found */
else
return NULL;
}
void DoSomething(SomeObject S){
if(S!=NULL){
/* Do action 1 */
}
else{
/* Do action 2 */
}
}
Run Code Online (Sandbox Code Playgroud)
我已经读过某个地方,返回NULL不是干净代码的一部分.所以我想知道这个案例的等效代码是什么.
更新:我已经阅读了这个问题,我认为我的情况有所不同.在这种情况下,if NULL返回然后什么都不做,而我需要做一些事情,如果NULL返回
如果您使用的是Java 8,请考虑Optional类,但要注意它并不适用于所有地方.
许多人认为(包括我)Optional应仅用于返回值,而不是参数,尤其不应用于对象属性.然而,一如既往没有硬规则,只要小心你不要Optional盲目地替换空处理,而不理解你是否从中获得任何好处.
例如,在示例代码中,Optional对您没有任何好处.由于您执行某些操作而不管是否为null,因此您只需更改if(s == null)为if(s.isPresent()).但是,如果逻辑只在s为非null的情况下才能执行某些操作,那么在没有a的情况下,else您可以使用它Optional.ifPresent()来使事情变得更清晰.当然,还有其他有用的方法Optional可以为您提供更清晰的代码,例如orElse()可以有效地使用默认值的代码.
看起来您的意思是特殊情况模式(特定实现是选项或空对象模式)。
Java 8和GuavaOptional库中有 Option 类型的 Java 实现,名为。
在您的情况下,您将使用Optional<SomeObject>并拥有此实现(我正在使用 Guava 实现):
Optional<SomeObject> getSomeObject(List<SomeObject>, int x) {
/* Search for object in list that has a properties
with value x */
if (found) {
return Optional.of(objectFound);
} else {
return Optional.absent(); // or Optional.empty(); in Java 8
}
// if objectFound variable is null when not found, you can simply use
// return Optional.fromNullable(objectFound);
// or return Optional.ofNullable(objectFound); in Java 8
}
Run Code Online (Sandbox Code Playgroud)
因此,关于返回可选对象的代码是不言自明的。然后你会:
void doSomething(Optional<SomeObject> o) {
if (o.isPresent()) {
SomeObject someObject = o.get();
/* Do action 1 */
} else {
/* Do action 2 */
}
// or opt.map(/* action 1 */).orElse(/* action 2 */); in Java 8
}
Run Code Online (Sandbox Code Playgroud)