相关疑难解决方法(0)

Java中if语句的长列表

对不起,我找不到回答这个问题的问题,我几乎可以肯定其他人已经提出了这个问题.

我的问题是我正在编写一些系统库来运行嵌入式设备.我有命令可以通过无线电广播发送到这些设备.这只能通过文字来完成.在系统库中我有一个线程来处理看起来像这样的命令

if (value.equals("A")) { doCommandA() }
else if (value.equals("B")) { doCommandB() } 
else if etc. 
Run Code Online (Sandbox Code Playgroud)

问题是它有很多命令会迅速失控.看起来很可怕,调试很痛苦,并且在几个月的时间里难以理解.

java design-patterns command-pattern

100
推荐指数
5
解决办法
3万
查看次数

在程序中替换或替换if..else if..else树的最佳方法是什么?

这个问题的动机是我最近开始看到的有点过于if..else if..else结构的东西.虽然它很简单并且有其用途,但它的一些东西不断告诉我它可以用更精细,优雅和通常更容易保持最新的东西代替.

为了尽可能具体,这就是我的意思:

if (i == 1) {
    doOne();
} else if (i == 2) {
    doTwo();
} else if (i == 3) {
    doThree();
} else {
    doNone();
}
Run Code Online (Sandbox Code Playgroud)

我可以想到两种简单的方法来重写它,或者通过三元(这只是编写相同结构的另一种方式):

(i == 1) ? doOne() : 
(i == 2) ? doTwo() :
(i == 3) ? doThree() : doNone();
Run Code Online (Sandbox Code Playgroud)

或使用Map(在Java中,我认为在C#中)或字典或任何其他K/V结构,如下所示:

public interface IFunctor() {
    void call();
}

public class OneFunctor implemets IFunctor() {
    void call() {
        ref.doOne();
    }
}

/* etc. */    

Map<Integer, IFunctor> methods = new …
Run Code Online (Sandbox Code Playgroud)

language-agnostic design-patterns

34
推荐指数
5
解决办法
3万
查看次数