gpt4 book ai didi

java - 在检查条件时摆脱代码中嵌套 if 的最佳方法是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:19:03 25 4
gpt4 key购买 nike

我正在用 Java 开发一个 BlackBerry 应用程序,我有一个 Options 类,其中存储了所有用户设置。问题是我需要检查一些条件才能知道如何 react 。随着我不断添加更多功能,会向用户显示更多 GUI 选项,更多设置存储在 Options 类中,并且需要检查更多条件。

以下面的代码为例:

private void doCallMonitoring(int callId){
/*This is the part that I want to avoid. Having
multiple nested ifs. Here's just two conditions
but as I add more, it will get unmantainable
very quickly.*/
if(Options.isActive().booleanValue()){
callTime = new Timer();
TimerTask callTimeTask = new TimerTask(){
public void run(){
callTimeSeconds++;
if((callTimeSeconds == Options.getSoftLimit().intValue()) && (Phone.getActiveCall().getStatus() == PhoneCall.STATUS_CONNECTED)){
injectDTMFTone(Phone.getActiveCall());
}else if((callTimeSeconds >= Options.getHardLimit().intValue()) && (Phone.getActiveCall().getStatus() == PhoneCall.STATUS_CONNECTED)){
injectEndCall();
}
}
};
callTime.schedule(callTimeTask, 0,1000);
}else{
System.out.println("Service not active");
}
}

我希望它的工作方式是通过一次调用验证所有选项,并从那里确定操作的诅咒。我怎样才能实现这样的设计?

最佳答案

另一种选择是让诸如 injectDMTFTone() 之类的方法检查它们是否要处理该条件,并根据是否已处理返回 true 或 false。

例如:

public void run() {
callTimeSeconds++;
do {
if (handleInjectDMTFTone())
break;
if (handleInjectEndCall())
break;
} while(false);

callTime.schedule(callTimeTask, 0,1000);
}

boolean handleInjectDMTFTone() {
if ((callTimeSeconds != Options.getSoftLimit().intValue()) ||
(Phone.getActiveCall().getStatus() != PhoneCall.STATUS_CONNECTED))
return false;

injectDTMFTone(Phone.getActiveCall());
return true;
}

boolean handleInjectEndCall() {

if ((callTimeSeconds < Options.getHardLimit().intValue()) ||
(Phone.getActiveCall().getStatus() != PhoneCall.STATUS_CONNECTED))
return false;

injectEndCall();
return true;
}

当然,不是调用另一个 injectDMTFTone() 方法或 injectEndCall() 方法,您只需在这些方法中直接内联该逻辑即可。通过这种方式,您可以将有关如何以及何时处理这些情况的所有逻辑集中在同一个地方。

这是我最喜欢的模式之一;使用 if 语句尽可能靠近方法的顶部,以消除条件和返回。该方法的其余部分没有缩进很多级别,并且易于阅读。

您可以通过创建对象来进一步扩展它,这些对象都实现相同的接口(interface)并且位于处理程序存储库中,您的 run 方法可以迭代以查看哪个将处理它。这对您的情况可能会或可能不会过度杀伤。

关于java - 在检查条件时摆脱代码中嵌套 if 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/620810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com