【问题标题】:How to simplify instanceof and ternary operator expression如何简化 instanceof 和三元运算符表达式
【发布时间】:2021-10-02 10:54:39
【问题描述】:

给定以下 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 表达式...但是是的...我可以尝试什么?

【问题讨论】:

  • 你可以有一个单一的回报声明return (personB instanceof NpEntity || personB instanceof JpEntity) ? personB : null;
  • 但这实际上并不完全相同......
  • 老实说,我怀疑你能不能让它变得更干净。值得指出的是,这不是一种常见的做法,这可能是它没有更短语法的原因之一。
  • return (NP == id? personB instanceof NpEntity: personB instanceof JpEntity)? personB: null;

标签: java optional conditional-operator instanceof


【解决方案1】:

你可以这样做:

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
    );
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 1970-01-01
    相关资源
    最近更新 更多