Groovy—为什么一个1位数的字符串会被转换为int的字符?
以下代码输出了令人惊讶的Groovy—为什么一个1位数的字符串会被转换为int的字符?,groovy,types,Groovy,Types,以下代码输出了令人惊讶的51 int a = "3" println a // outputs 51 Groovy似乎将3字符解释为int,并继续执行 为什么groovy不抛出一个ClassCastException?我怎样才能阻止groovy忽略这些类型的键入错误呢?int a=“3”使用groovy类型强制并自动将“3”转换为char,并将其转换为51的ASCII整数值。对于作为字符串的单个数字(两个或两个以上的数字将生成运行时错误),其行为仅与此类似。此语句的结果与int
51
int a = "3"
println a // outputs 51
Groovy似乎将3
字符解释为int
,并继续执行
为什么groovy不抛出一个ClassCastException
?我怎样才能阻止groovy忽略这些类型的键入错误呢?int a=“3”使用groovy类型强制并自动将“3”转换为char,并将其转换为51的ASCII整数值。对于作为字符串的单个数字(两个或两个以上的数字将生成运行时错误),其行为仅与此类似。此语句的结果与inta=(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()
静态类型检查强制执行严格的检查
int a=“3”
使用Groovy类型强制并自动将“3”转换为char,并将其转换为51的ASCII整数值。对于作为字符串的单个数字(两个或两个以上的数字将生成运行时错误),其行为仅与此类似。此语句的结果与inta=(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()
静态类型检查强制执行严格的检查