Clojure 的 if-let允许您在实际评估函数之前调整函数返回值的绑定(bind)。这使您可以避免像 Java 中的
那样对一个函数求值两次(主要用于空值检查) if (somMap.get(ky) != null){
String val = someMap.get(ky)
//do something }
在 Java 中是否有类似 if-let 的东西可以让你避免这种事情?
最佳答案
等效? - 不,if-let
条件宏是 Conjure 独有的。
不同的语言使用不同的结构,例如在 Mathematica 中我可以这样写:
g[x_] := 1 /; x > 0
g[x_] := -1 /; x <= 0
最后的条件告诉函数定义是有效的。
Java 不是函数式语言。你可以在 c# 中做几个不同的方面,但它支持 ??运算符、out 和 ref 方法参数、惰性方法体等——而 java 没有。
在 Java 中,您很可能会使用 Google Guava 库(或 Apache commons 或...)和 ImmutableMap。请注意,它不允许 key 能力为 null!
It is preferable mainly for consistency and maintainability of your code.
Java 有空保存类型的概念,但没有强制执行。类似地,Java 在 JDK10 中可以有可为 null 的值类型,但目前没有。
但是我认为在 Java 中执行此操作的正确方法是
String val = somMap.containsKey(ky) ? values.get(ky) : fallback;
并且没有空键或空值。如果你被迫处理空键或空值,那么我认为添加空检查是合理的。为确保程序会失败,您可以使用
Preconditions.checkNotNull(val, "EOW | key [%s] has NULL value", val );
引用:Google guava Precontitions source .
关于java - 是否有与 Clojure 的 if-let 等效的 Java?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33503383/