减少表达式中使用的条件运算符数(4)(允许的最大值为3)

emo*_*ssi 1 java conditional-operator

如何减少运营商的复杂性?我有条件问题.

Object someObject = getSomeObject();
boolean isNotInstanceOfA = !(someObject instanceof A);
boolean isNotInstanceOfB = !(someObject instanceof B);
boolean isNotInstanceOfC = !(someObject instanceof C);
boolean isNotInstanceOfABC = isNotInstanceOfA && isNotInstanceOfB && isNotInstanceOfC;
if (isNotInstanceOfABC && (container.getChildren(itemId) == null || container.getChildren(itemId).isEmpty())) {
    return "something";
 }
Run Code Online (Sandbox Code Playgroud)

小智 6

itemId 是否为原始类型?我猜它不是原始的,为了减少代码,你可以将这个 null 或空检查移动到一个单独的方法并返回一个布尔值..你也可以减少一些这样的代码:`

    boolean isNotInstanceOfABC = !(someObject instanceof A) && !(someObject instanceof B) && !(someObject instanceof C);

    if (isNotInstanceOfABC && isEmptyOrNull(container.getChildren(itemId))) {
        return "something";
    }`
Run Code Online (Sandbox Code Playgroud)


dev*_*per 5

您实际上可以在if块之前计算条件,以便代码更具可读性,如下所示:

boolean isChildNull = (container.getChildren(itemId) == null);
boolean isChildEmpty = (isChildNull || container.getChildren(itemId).isEmpty());

if (isNotInstanceOfABC && isChildEmpty) {
    return "something";
}
Run Code Online (Sandbox Code Playgroud)

但是,我从你的代码,你正在做的事情错了,因为你推断做大量的instanceof检查,这是不是所有的好做法,你可能需要考虑重构你的代码解释这里(多态替换条件语句).