java - 无需两次检查值即可表达此 Java 条件的最简洁方法

标签 java control-flow

我有一个变量,x

我想调用一个方法 m() 只有当 x 是两个可能值之一时。

当调用m()时,我想传递一个参数给它,它的值取决于x的值。

有没有一种方法可以在 Java 中做到这一点,而无需多次检查 x 的值,并且只在一个地方调用/写入 m()(即不在 if 语句的多个分支中)?

我正在接受的一个解决方案:

switch (x) {
  case 1:
    y = "foo";
    break;
  case 2:
    y = "bar";
    break;
  default:
    y = null;
    break;
}

if (y != null) m(y);

但我忍不住觉得这是技术上检查 x 两次,只是通过为第二次检查添加“代理”来掩盖这一事实。

(澄清约束的原因:在阅读代码时,我很难理解当分支之间存在高度重复时分支很多的逻辑 - 它变成了“找不同”的游戏而不是简单地能够看到正在发生的事情。我更喜欢积极地重构这种重复,这是我在 Ruby、JS 和其他语言中很好的习惯;我希望我能学会为 Java 做同样的事情并使代码更容易让我和其他人一目了然。)

最佳答案

我不确定你想做什么,但你可以使用 Map 从 'x' 获取 'y' 参数

Map<Integer, String> map = new HashMap<>();
map.put(1, "foo");
map.put(2, "bar");

if (map.containsKey(x)) {
    m(map.get(x));
}

关于java - 无需两次检查值即可表达此 Java 条件的最简洁方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39959296/

相关文章:

java - 项目在工作集中出现两次 - eclipse

c++ - Do-While(false) block 与返回的效率

functional-programming - "if"可以使用 "call/cc"实现吗?

loops - 如何从 Perl 中的内部循环中断外部循环?

recursion - 返回 Lisp 中递归函数的顶层调用

c# - 需要帮助才能摆脱异常丛林

java - 在JAVA中访问父for循环之外的数组

java - 如何在 Codename One GUI Builder 应用程序中使用后退导航?

java - JTree 空指针加载第一行

java - 将颜色从 RGB 转换为 YCbCr 包装图像