[英]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.