我有一个带有以下if-else-if链的方法:
if(downstreamActual.getNumber() <= downstreamRecommended.getNumber()){
downstreamActual.setInvalid();
showErrorWindow();
throw new NumberFormatException();
}else if(upstreamActual.getNumber() <= upstreamRecommended.getNumber()){
upstreamActual.setInvalid();
showErrorWindow();
throw new NumberFormatException();
}else if(biUpstreamActual.getNumber() <= biUpstreamRecommended.getNumber()){
biUpstreamActual.setInvalid();
showErrorWindow();
throw new NumberFormatException();
}else if(biDownstreamActual.getNumber() <= biDownstreamRecommended.getNumber()){
biDownstreamActual.setInvalid();
showErrorWindow();
throw new NumberFormatException();
}
我们每一步都做同样的工作(为布尔表达式中使用的第一个对象调用相同的方法,调用showErrorWindow()
并抛出Exception
)
有哪些好的技巧,尤其是使用Java 8来使这些代码更易于管理?
答案 0 :(得分:3)
根据您的评论,我认为您不需要Java 8构造。
只需使用方法:
public void validate (NumberTextBox actual, NumberTextBox recommended)
{
if(actual.getNumber() <= recommended.getNumber()) {
actual.setInvalid();
showErrorWindow();
throw new NumberFormatException();
}
}
然后拨打4次电话:
validate (downstreamActual,downstreamRecommended);
validate (upstreamActual,upstreamRecommended);
...
由于第一个失败会引发异常,从而阻止对其余的进行测试,因此您不需要if else-if结构。
答案 1 :(得分:0)
我在这里看不到java 8的参与,但你可以做的一件事是以下列方式为if-else链创建一个方法:
public void handleStreams() throws NumberFormatException {
if(downstreamActual.getNumber() <= downstreamRecommended.getNumber()) {
setInvalid(downstreamActual);
} else if(upstreamActual.getNumber() <= upstreamRecommended.getNumber()) {
setInvalid(upstreamActual);
} else if(biUpstreamActual.getNumber() <= biUpstreamRecommended.getNumber()) {
setInvalid(biUpstreamActual);
} else if(biDownstreamActual.getNumber() <= biDownstreamRecommended.getNumber()) {
setInvalid(biDownstreamActual);
} else {
return;
}
showErrorWindow();
throw new NumberFormatException();
}
public void setInvalid(MyObject stream) {
stream.setInvalid();
}
答案 2 :(得分:0)
如果这些流有一个共同的超类,那么你可以直接在它们中实现它。换句话说,如果
public class DownstreamActual extends CustomStream {
然后您可以将recommendation
作为变量添加到CustomStream
类
public int recommendedValue;
并在创建实例时设置它。然后您可以创建一个检查值
的方法public void checkRecommendedValue() {
if(this.getNumber() <= this.recommendedValue){
this.setInvalid();
showErrorWindow();
throw new NumberFormatException();
}
}
答案 3 :(得分:0)
使用java 8可以做的一件事是避免使用单独的方法(如果它调用你)并使用新语法在方法内创建一个方法:
BiConsumer<Thing, Thing> check = (actual, recommended) -> {
if (actual.getNumber() <= recommended.getNumber()) {
actual.setInvalid();
showErrorWindow();
throw new NumberFormatException();
}
};
check.accept(downstreamActual, downstreamRecommended);
check.accept(upstreamActual, upstreamRecommended);
check.accept(biUpstreamActual, biUpstreamRecommended);
check.accept(biDownstreamActual, biDownstreamRecommended);