gpt4 book ai didi

java - 如何以更优雅和可扩展的方式编写这些条件语句

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

在我的软件中,我需要根据 2 个参数来决定功能的版本。例如。

Render version 1 -> if (param1 && param2) == true;
Render version 2 -> if (!param1 && !param2) == true;
Render version 3 -> if only param1 == true;
Render version 4 -> if only param2 == true;

所以,为了满足这个要求,我写了一段代码,如下所示 -

if(param1 && param2) //both are true {
version = 1;
}
else if(!param1 && !param2) //both are false {
version = 2;
}
else if(!param2) //Means param1 is true {
version = 3;
}
else { //Means param2 is true
version = 4;
}

肯定有多种方法可以对此进行编码,但我在尝试了不同的方法后最终确定了这种方法,因为这是我能想到的最易读的代码。
但是这段代码绝对不可扩展,因为 -

  1. 假设明天我们要引入名为 param3 的新参数。然后没有。支票的数量会增加,因为有多种可能组合。
  2. 对于这个软件,我非常确定我们将来必须适应新的参数。

是否可以通过任何可扩展且可读的方式来对这些需求进行编码?

最佳答案

编辑:对于可扩展的解决方案,通过 Map 定义每个参数组合的版本:

Map<List<Boolean>, Integer> paramsToVersion = Map.of(
List.of(true, true), 1,
List.of(false, false), 2,
List.of(true, false), 3,
List.of(false, true), 4);

现在找到正确的版本是一个简单的 map 查找:

    version = paramsToVersion.get(List.of(param1, param2));

我初始化 map 的方式从 Java 9 开始工作。在旧的 Java 版本中,它有点冗长,但可能仍然值得这样做。即使在 Java 9 中,如果您有 4 个或更多参数(对于 16 种组合),您也需要使用 Map.ofEntries,这也有点冗长。

原始答案:我喜欢嵌套的 if/else 语句并且每个参数只测试一次:

    if (param1) {
if (param2) {
version = 1;
} else {
version = 3;
}
} else {
if (param2) {
version = 4;
} else {
version = 2;
}
}

但它对许多参数的扩展性很差。

关于java - 如何以更优雅和可扩展的方式编写这些条件语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54723382/

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