簡體   English   中英

如何簡化 instanceof 和三元運算符表達式

[英]How to simplify instanceof and ternary operator expression

鑒於以下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表達式......但是是的......我可以嘗試什么?

你可以這樣做:

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

它將 return 語句的數量減少到 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
    );
}

在某種程度上,這是一個品味問題......

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM