Sea*_*oyd 31 java syntax groovy
作为一名Java程序员,我并没有真正的Groovy背景,但我最近使用Groovy来扩展Maven(使用GMaven).到目前为止,我可以在Groovy中使用我需要的所有Java代码,添加了Groovy糖(元类方法,更多运算符,闭包).我对Groovy的了解远非完整,但我喜欢它,特别是对于脚本编写目的(我在企业场景中使用非静态类型语言时要小心,但这不是主题).
无论如何,问题是:
是否每一位有效的Java代码都自动有效的Groovy代码?(我说的是源代码,而不是编译的类,我知道Groovy可以与Java类交互.)或者是否有在Groovy中非法的Java构造?也许是一个保留的Groovy关键字,可以用作Java中的标识符,还是其他什么?或者Groovy故意被设计为与Java 100%兼容?
ata*_*lor 21
不.以下是groovy中的关键字,但不是Java:
any as def in with
Run Code Online (Sandbox Code Playgroud)
此外,虽然不是关键字,delegate并且owner在封闭特殊的含义,如果你不小心可能你绊倒.
此外,语言语法也存在一些细微差别.首先,Java在声明中出现数组括号的位置更加灵活:
public static void main(String args[]) // valid java, error in groovy
Run Code Online (Sandbox Code Playgroud)
Groovy的解析方式也不同.这是一个例子:
public class Test {
public static void main(String[] args) {
int i = 0;
i = 5
+1;
System.out.println(i);
}
}
Run Code Online (Sandbox Code Playgroud)
Java将打印6,groovy将打印5.
虽然groovy主要与java兼容源代码,但是有很多不一样的极端情况.也就是说,它与人们实际编写的代码非常兼容.
Gor*_*vic 17
事实并非如此.
我最喜欢的不兼容性:文字数组:
String[] s = new String[] {"a", "b", "c"};
Run Code Online (Sandbox Code Playgroud)
在Groovy中,这个上下文中的花括号应该包含一个闭包,而不是一个文字数组.
tim*_*tes 12
Groovy网站上有一个页面记录了一些差异,另一个页面列出了陷阱(例如换行符)
还有其他一些事情,一个例子是Groovy不支持do...while循环结构
其他人已经提供了在Groovy中非法的Java语法示例(例如文字数组).值得记住的是,在两种语言中,一些合法的语法并不意味着同样的事情.例如在Java中:
foo == bar
Run Code Online (Sandbox Code Playgroud)
身份测试,即do foo和barboth都指向同一个对象?在Groovy中,这会测试对象的相等性,即返回结果foo.equals(bar)