如何简化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
);
}
在某种程度上,这是一个品味问题...
给定以下 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
);
}
在某种程度上,这是一个品味问题...