我有Java 8 + Groovy 2.4.12,下面的代码编译并运行。
import java.util.function.Consumer
import groovy.transform.CompileStatic
@CompileStatic
class Bar {
public static <T> void foo(T a, Consumer<T> c) { c.accept(a) }
static void main(args) {
['a','b'].each {
int xyz
xyz = 1
foo('') {
println '1'
return
}
}
}
}
但如果您注释掉return
,编译器会说
Groovy:[Static type checking] - Cannot call <T> Bar#foo(T, java.util.function.Consumer <T>) with arguments [java.lang.String, groovy.lang.Closure
此外,如果你注释掉xyz
值赋值,那么它就可以了。因此,下面的代码编译并运行:
['a','b'].each {
int xyz
// xyz = 1
foo('') {
println '1'
// return
}
}
这似乎是一种特殊情况,只有在你有:
时才会发生@CompileStatic
注释int xyz = 1
)我的问题是;这是一个编译器错误还是有一个理性的原因,为什么它不编译没有return
语句,但编译它?或者为什么添加变量定义会打破它?
答案 0 :(得分:0)
我的问题是;这是一个编译器错误还是有理性的原因 为什么它没有返回语句就编译但是用它编译?
前者。