大多数Java代码也是语法上有效的Groovy代码。但是,有一些例外使我想到了这个问题:
在Groovy中,Java中哪些构造/功能在语法上无效? 请提供无效的Groovy代码(Groovy 1.6)的Java代码(Java
1.6)的具体示例。
更新:
到目前为止,我们有五个语法上有效的Java代码示例,它们不是有效的Groovy代码:
def
是Groovy中的关键字,但在Java中不是"$$"
-strings- GString
在Groovy中解析为无效s-- class Foo { Integer x; { x = 1; } }
这是完整的清单吗?还有其他例子吗?
更新#1:
我已经开始悬赏以解决这个问题。赏金将授予提供最全面示例的人员。到目前为止,我们已经发现了五个示例,但是我敢肯定还有更多示例。所以让他们来吧!
这是有效的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文档提供了更详细,更广泛的差异列表。
问题内容: 我正在使用Java自动键入内容的系统上。我是这样写的: 但我收到此错误: 上 问题答案: 您的键盘布局应有一个@符号的键,此代码才能起作用。可以? 如果您的键盘设置为美式布局,则需要输入shift + 2来输入@符号,并且必须使用VK_2代替VK_AT。
【代码效率】页面主要反馈和分析项目运行过程中代码的 “CPU占用时间” 和 “堆内存分配” 情况。其中,这里所分析的代码既包含Unity引擎的自身模块代码,也包含您自己书写的逻辑脚本。通过该部分,您将快速掌握项目中逻辑代码的运行性能瓶颈,从而有的放矢地进行改进和优化。 CPU占用时间 函数汇总 该项主要显示项目运行过程中具有较高CPU占用的函数列表,包括函数的 “总CPU耗时”、“最大单次CPU占
本文向大家介绍让Java代码更高效,包括了让Java代码更高效的使用技巧和注意事项,需要的朋友参考一下 本文简单介绍一下在写代码过程中用到的一些让JAVA代码更高效的技巧。 1,将一些系统资源放在池中,如数据库连接,线程等.在standalone的应用中,数据库连接池可以使用一些开源的连接池实现,如C3P0,proxool和DBCP等,在运行在容器中的应用这可以使用服务器提供的DataSource
问题内容: 我的问题是,当它尝试第二次读取对象时,会引发异常: 我第一次发送完全相同的对象消息;但是,当我第二次尝试执行相同的操作时,则会在上面抛出错误。我是否需要重新初始化readObject()方法?我什至打印出了下面一行所接收到的消息对象,它与第一个可以正常工作的实例完全相同。 Object buf = myInput.readObject(); 我假设附加有一些问题,但是附加确实没有用。我
我试图发送对象从服务器模块到客户端模块。不幸的是,它抛出错误。有人知道下面的代码有什么问题吗? 来自服务器模块的类 客户端模块中的类看起来相同,但看起来如下所示: 最后一个类,它接受套接字连接:
原因: Workerman是常驻内存运行的,常驻内存可以避免重复读取磁盘、重复解释编译PHP,以便达到最高性能。所以更改业务代码后需要手动reload或者restart才能生效。 同时workerman提供一个监控文件更新的服务,该服务检测到有文件更新后会自动运行reload,从新载入PHP文件。开发者将其放入到项目中随着项目启动即可。 注意:windows系统不支持reload,无法使用监控服务