这是有效的Java 6但无效的Groovy
1.6的项目列表。这不是一个完整的列表,但我认为它涵盖了大多数情况。其中一些是稍后提到的Groovy版本所允许的。
(顺便说一句,我认为您应该注意,非静态初始化块确实可以在Groovy中工作。)
Groovy 1.6中的任何内部类声明( 1.7添加了内部类):
包括静态
public class Outer{ static class Inner{}}非静态的
public class Outer{ class Inner{}}本地班级
public class Outer{ public static void main(String[] args) { class Local{} }}和匿名类
java.util.EventListener listener=new java.util.EventListener(){};使用Groovy关键字作为变量在任何Groovy版本中均无效:
int def;int in;int threadsafe;int as;
Java数组初始化
String[] stuff=new String[]{"string"};int[] array={1,2,3};通过更改
{...}为使用Groovy数组文字格式[...]。
在后面不是有效表达式的字符串中使用美元符号
String s="$$";String s="$def";String s="$enum";String s="$;";String s="$\";//etc.
for循环中有多个初始化程序
for (int i=0, j=0; i < 5; i++) {}for循环中有多个增量
int j=0;for (int i=0; i < 5; i++,j++) {}使用换行符分解一些表达式
int a= 2 / 2 ;
提示:在Groovy中使用反斜线继续
int a= 2 / 2 ;
无外壳的末端开关
switch(a){ case 1:}交换机无默认设置
在两种情况下都适用,默认值在末尾
int a=0;switch(a){ default:}或中间的某个地方
switch(a){ default: case 1: break;}带有列表的注释
@SuppressWarnings({"boxing","cast"})提示:改为使用Groovy列表文字语法:
@SuppressWarnings(["boxing","cast"])
本机方法声明
public native int nativeMethod();
1.6中的每个枚举类(在Groovy更高版本中有效)
public enum JavaEnum{ ADD{ public String getSymbol(){ return "+"; } }; abstract String getSymbol();}做循环
do{ System.out.println("stuff");}while(true);平等
尽管从技术上讲
==Groovy和Java是有效的,但在语义上有所不同。这是您不能不进行更改而仅仅依赖于将Java编译为Groovy的原因之一。更糟糕的是,有时由于Java字符串嵌入,它似乎可以工作。
该示例太长了,无法添加到现有答案中,但是重点是, 与Groovy 语法上 有效的 Java代码 在运行时的行为可能有所不同
__。
要在Groovy中
x == y获得两个非空对象的结果与Java相同
x.is(y)。
x == y是有效的Groovy,只是 做了一些不同的事情
。
Groovy文档提供了更详细,更广泛的差异列表。



