通过滥用包含在if语句中的三元调用的条件方法?

时间:2017-01-26 22:37:09

标签: java ternary-operator

最近我正在进行代码审查并遇到了这个人:

if(!sharePermission.isExpired() ? activePermissions.add(sharePermission) : expiredPermissions.add(sharePermission));

基本上使用三元表达式来调用返回布尔值并将其包装在if(...)语句中的方法,以满足作为独立语句的要求。这或多或少比

有效
if(!sharePermission.isExpired())
   activePermissions.add(sharePermission); 
else 
   expiredPermissions.add(sharePermission); 

如果你真的需要将代码压缩到一行?是否在为if(...)包裹时为三元表达式返回的值分配了多少额外空间?

我不是其中任何一个的粉丝,只是好奇。

3 个答案:

答案 0 :(得分:5)

滥用if语句来做到这一点,不要介意条件表达式。

编写完整的if语句或使用条件运算符选择要添加的列表会更清晰:

List<Permission> list = isExpired() ? expiredPermission : activePermission;
list.add(sharePermission);

答案 1 :(得分:3)

没有发生任务,只评估boolean条件。没有为评估结果分配额外的内存。

使用三元表达式来模拟三元语句然而,非常不正统。它会降低代码的可读性,而不会带来任何额外的好处。因此,使用带有if的普通else是更好的选择。

请注意,如果activePermissionsexpiredPermissions属于同一类型,则可以使用三元表达式来决定add调用的目标,如下所示:

(sharePermission.isExpired() ? expiredPermissions : activePermissions).add(sharePermission);

答案 2 :(得分:0)

您正在寻找的if..else的三元等价物就像 -

(!sharePermission.isExpired() ? activePermissions : expiredPermissions).add(sharePermission); // no if here

相当于

if(!sharePermission.isExpired()) {
    activePermissions.add(sharePermission); 
}
else {
    expiredPermissions.add(sharePermission);
}