以下代码输出this.modules = {
keyboard: {
bindings: this.bindings
},
formula: true,
toolbar: true,
counter: { container: '#counter', unit: 'word' },
equalsSymbol: { container: '#equalsBtn', selector: 'equals' },
impliesSymbol: { container: '#impliesBtn', selector: 'implies' }
};
51
Groovy似乎将 int a = "3"
println a // outputs 51
字符解释为3
并继续。
为什么groovy不会抛出int
?我怎么能阻止groovy忽略这些打字错误呢?
答案 0 :(得分:5)
int a = "3"
使用Groovy类型强制并将“3”自动转换为char并将其转换为ASCII整数值51.对于单个数字作为字符串(两个或更多个数字),此行为仅此类似将生成运行时错误)。此语句与int a = (char)"3"
具有相同的结果。这种类型的无声bug可能很讨厌,但类型检查可以检测到这样的错误。
在Groovy中,您可以在类或方法级别启用静态类型检查。
@groovy.transform.TypeChecked
void run1() {
int a = "3" // triggers type-check exception
println a
}
@groovy.transform.TypeChecked
void run2() {
def a = '3' as int
println a // outputs 3
}
run1()
run2()
静态类型检查强制严格compile-time type check。
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
C:\java\groovy\Example.groovy: 3: [Static type checking]
- Cannot assign value of type java.lang.String to variable of type int
@ line 3, column 10.
int a = "3" // triggers type-check exception
^