【问题标题】:Groovy vs. Java syntax discrepancyGroovy 与 Java 语法差异
【发布时间】:2012-04-17 19:43:08
【问题描述】:

在 Java 中我可以这样做:

return a
    && b
    && c;

在 Groovy 中,它返回一个编译错误:unexpected token: &&。如果我在 Groovy 中省略了 return 关键字,也会发生这种情况。但是,如果我将语句括在括号中,它就可以正常工作。

在我阅读过的所有 Groovy 资源中,我都被告知我应该能够在任何我想要的地方编写“纯 Java”。这是一个错误吗?如果不是,这个设计决定的原因是什么?

我查看了here,但没有发现这个问题。我知道有些东西 不能 从 Java 继承,但这似乎不是其中之一。

【问题讨论】:

  • +1 这是一个非常有趣的问题,但主要是学术兴趣。在实践中,这将是一种非常不寻常的方式来编写返回语句
  • 大部分情况下是这样。我想说abc 足够丑陋。

标签: java syntax groovy


【解决方案1】:

问题在于 Groovy 不需要显式的行终止符 - 而return a 本身看起来像是一个有效的语句。你可以使用:

return a &&
       b &&
       c;

或者使用续行:

return a \
    && b \
    && c;

不是所有的 Java 都是有效的 Groovy。虽然涵盖了大多数 Java 语法,但 Groovy 的一个特性偶尔会对有效的 Java 产生影响。

【讨论】:

    【解决方案2】:

    Groovy 似乎不需要分号,所以我认为您的代码被解释为:

    return a;
        && b;
        && c;
    

    来自the documentation

    Groovy 使用与 Java 类似的语法,尽管在 Groovy 中分号是可选的。

    这节省了一点打字,但也使代码看起来更干净(令人惊讶的是,对于这样一个微小的变化)。所以通常如果每一行都有一个语句,你可以完全省略分号——尽管如果你想使用它们也没问题。如果要将多个语句放在一行中,请使用分号分隔语句。

    【讨论】:

      【解决方案3】:

      你几乎可以在 groovy 中做所有的 java,除了你看下面的。

      http://groovy.codehaus.org/Differences+from+Java

      如果您想直接使用 java,那么您可以在 *.java 类中进行,然后将其放入 src 文件夹中。

      【讨论】:

      • 我看过这个页面,但我的问题没有在那里解决。
      • 它围绕它跳舞 需要注意的事项 分号是可选的。如果您愿意,可以使用它们(尽管您必须使用它们将多个语句放在一行中)。
      • 是的,我已经知道分号是可选的......这没有帮助。而且在这里使用分号甚至不能解决问题。
      • 基本问题是 groovy 编译器无法识别该行在下一行继续你需要告诉编译器该行继续
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-18
      • 2011-01-05
      相关资源
      最近更新 更多