如何简化instanceof和三元运算符表达式

ybzsozfc  于 2021-09-13  发布在  Java
关注(0)|答案(2)|浏览(364)

给出以下java代码。

private PersonEntity bezP(int id, BezEntity fEntity) {
    PersonEntity personB = fEntity.getPersonB();
    if (NP == id) {
      return personB instanceof NpEntity ? personB : null;
    }
    return personB instanceof JpEntity ? personB : null;
  }

看来逻辑有点重复。。。但每一次重构它的尝试都或多或少地导致了相同的复杂性。。。。
我和一些朋友一起玩 Optionals 表达。。。但是是的。。。我能试试什么?

wlp8pajw

wlp8pajw1#

你可以这样做:

private PersonEntity bezP(int id, BezEntity fEntity) {
    PersonEntity personB = fEntity.getPersonB();
    return (NP == id ? NpEntity.class : JpEntity.class).isInstance(personB)
        ? personB : null;
}

它将返回语句的数量减少到1,但我认为您的原始代码更具可读性。或者,您可以推出另一种方法:

private PersonEntity returnIfMatchingType(Class<?> type, BezEntity fEntity) {
    PersonEntity personB = fEntity.getPersonB();
    return type.isInstance(personB) ? personB : null;
}

private PersonEntity bezP(int id, BezEntity fEntity) {
    return returnIfMatchingType(
        NP == id ? NpEntity.class : JpEntity.class,
        fEntity
    );
}

在某种程度上,这是一个品味的问题。。。

jyztefdp

jyztefdp2#

Optional 在这里没有真正的好处。您可以使用 if 和短路逻辑运算符:

if ((NP == id && personB instanceof NpEntity) || personB instanceof JpEntity) {
    return personB;
} else {
    return null;
}

... 或三元运算符:

return ((NP == id && personB instanceof NpEntity) || personB instanceof JpEntity) ? personB : null;

相关问题