【问题标题】:Does java have a default value return like javascript?java是否有像javascript一样的默认值返回?
【发布时间】:2014-12-10 20:35:59
【问题描述】:

我想知道 java 是否具有“默认值分配”(我真的不知道如何调用它),就像您可以在 javascript 或 python 中执行的操作一样。

例如在js中你可以这样做:

var myVar = variable || "default value";

如果 variable 包含一个值,myVar 将具有 variable 的值,否则 myVar 将是字符串“默认值”。

在python中你也可以这样做:

a = "hello" 
b = a or "good bye" 
print b #this will print "hello" 
a = None
b = a or "good bye" 
print b #this will print "good bye"

你能在java中做类似的事情吗?通常当我必须在 Java 中执行此操作时,我会执行以下操作:

String a = b != null ? b : "default value";

但我认为您可以在 js 或 python 中执行的操作更具可读性。你能告诉我这个“名字”是什么吗?我知道 || 符号它是一个 or 运算符,但是当你做这个“默认值”的事情时它是如何被调用的。 谢谢

【问题讨论】:

  • 您在问题中发布的示例代码是在 Java 中执行此操作的方法。为清楚起见,我建议添加括号,使其显示为String a = ((b != null) ? b : "default value")
  • Java 不会检查像 Javascript 这样的变量的真实性。
  • 相关:在 C# 中,您可以使用 null-coalescing operator ?? 执行此操作。见:Is there a java equivalent to null-coalescing operator in C#?
  • @Tichodroma 试过什么?尝试使用其他所有具有默认值的编程语言的语法? “你试过了吗?”对于那些问“当我做 X 会发生什么?”的人来说,这是一个很好的回应,但对于“Java 是否有类似编程语言 Y 的特性 X 的特性”,它就不太适用了。跨度>
  • 您的 python 示例实际上会导致异常,因为与 javascript 不同,引用不存在的 c 变量不会导致 null/None

标签: java


【解决方案1】:

Java 中没有类似的表达式(除了您已经描述的三元运算符)。

在某些脚本语言(如 JS、Python 和 Lua)中,andor 操作将返回考虑的最后一个值(or 的第一个真值或最后一个假值,以及第一个假值或最后一个and) 的真实值而不是布尔值,这就是 var myvar = param || "default" 技巧起作用的原因。

然而,在 Java 中,&&|| 运算符仅适用于布尔值,因此上述行为不适用。

【讨论】:

    【解决方案2】:

    由于 Java 比 JavaScript 或 Python 更具有静态类型,恐怕不是。考虑这个例子:

    myVar = variable || "default value";
    

    为了在 Java 中执行此操作,variable"default value" 必须是 Booleans,因为它们在 boolean logic conditional operator 中使用。 结果 (myVar) 也将是Boolean

    由于 Java 中的类型必须更加静态显式,因此需要定义完整的比较表达式:

    myVar = (variable != null) ? variable : "default value";
    

    在这种情况下,布尔表达式是被检查的条件,variable"default value" 需要属于同一类型。这也将是myVar 的结果类型。

    在 JavaScript(以及我使用过的几乎所有动态类型系统)中,几乎所有 anything 都可以作为布尔值进行检查。 (任何事情都可以是“真实的”。)然而,在 Java 或 C# 等静态类型语言中,情况通常并非如此。

    【讨论】:

      【解决方案3】:

      不,Java 中的方法返回类型没有默认值。

      在普通的旧 Java 中,您会编写如下内容:

      if (value != null) {
        return value;
      else {
        return "default";
      }
      

      或者您可以将其简化为

      return value != null ? value : "default";
      

      在Java8 中,可以使用Optional<T>。这意味着,您可以持有一个值,也可以不持有。这看起来像这样:

      Optional<String> optionalVal = Optional.ofNullable(null); // or Optional.of("Foo");
      return optionalVal.getOrElse("default");
      

      【讨论】:

        【解决方案4】:

        这个技巧在 Javascript 和 Python 中起作用的原因是 || 可以应用于非布尔值并根据它们的 truthiness 返回其参数之一。

        在 Java 中,|| 只能应用于布尔值,这意味着该技巧不起作用。

        【讨论】:

          【解决方案5】:
          String a = b != null ? b : "default value";
          

          这是以下的简写:

          if(b != null) a = b;
          else a = "default value";
          

          【讨论】:

            猜你喜欢
            • 2021-11-16
            • 1970-01-01
            • 1970-01-01
            • 2019-07-04
            • 1970-01-01
            • 2014-08-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多