使用条件运算符来选择调用特定方法的对象?

Car*_*arl 9 java coding-style conditional-operator

我有两个集合,以及根据是否满足某些条件而添加到这些集合中的一个或另一个集合的项目.

有点无意中,我偶然发现写作是合法的

(test(foo) ? cOne : cTheOther).add(foo);
Run Code Online (Sandbox Code Playgroud)

代替

if (test(foo)) {
 cOne.add(foo);
} else {
 cTheOther.add(foo);
}
Run Code Online (Sandbox Code Playgroud)

虽然第一个让我觉得聪明(总是加分),但我不确定长期可读性,可维护性等.我看到的基本优势是,如果我知道我总是会做同样的事情,它成为改变方法的一个位置(而不是两个,或者如果我通过条件运算符实现switch语句,可能很多).主要的缺点发生在不是这种情况时(即,我需要为某些情况而不是其他情况添加方法调用).

您看到两种方法(或其他解决方案)的优缺点是什么?

如果你不认为使用条件运算符设置哪个对象来调用方法的特定实例是正确的选择,是否存在合理的情况?

mat*_*t b 29

一个更简单的代码片段就是

SomeClass component = test(foo) ? cOne : cTheOther;
component.add(foo);
Run Code Online (Sandbox Code Playgroud)

换句话说,将分配与使用分开.

  • 它更容易阅读(有些人可能会辩论这个)并且更容易调试(很难反驳这一点).你可以在component.add(foo)上设置一个断点,并知道断点被击中的时刻是什么组件,而如果它在一行上与三元运算符完全相同,那么查看调试器中的值会更有效. (7认同)
  • 我相信大多数人会认为这既简洁又易读. (6认同)

Ant*_*ney 5

与示例一样聪明,可读性和可维护性始终是最明智的想法.

对于条件运算符,您应该只有最多两个值,如果您的条件超出最大值,它可能变得不可读.条件运算符不是处理不同值的标准方法.