Groovy 不推断方法的 return 类型
Groovy doesn't infer the return type of a method
我正在尝试键入检查一个简单的 Groovy 脚本:
@groovy.transform.TypeChecked
class C {
def fn() { return "result" }
def ln() { return fn().length() }
}
new C().ln()
我的期望是 fn
方法会被推断为 String
,但是当我尝试 运行 脚本时,我得到一个错误:
_GroovyUserScript_: 4: [Static type checking] - Cannot find matching method java.lang.Object#length(). Please check if the declared type is correct and if the method exists.
@ line 4, column 23.
def ln() { return fn().length() }
^
1 error
意味着方法的 return 类型被推断为 java.lang.Object
。现在,如果我将脚本更改为
@groovy.transform.TypeChecked
...
String fn() { return "result" }
...
脚本编译正确。
但是,我注意到以下脚本也可以正确编译:
@groovy.transform.TypeChecked
class C {
def fn() { return "result" }
}
def x() {
new C().fn().length()
}
x()
所以问题可能在于类型推断出于某种原因在相同 class 的方法之间不可传递?
在 groovy def
等于 Object
因此,第一种情况正确地失败了。
和 @groovy.transform.TypeChecked
只检查 class 或它注释的方法。在第二种情况下,方法 def x(){...}
没有注释(它在 class 之外声明)。
因此,在编译步骤没有执行任何验证。
我正在尝试键入检查一个简单的 Groovy 脚本:
@groovy.transform.TypeChecked
class C {
def fn() { return "result" }
def ln() { return fn().length() }
}
new C().ln()
我的期望是 fn
方法会被推断为 String
,但是当我尝试 运行 脚本时,我得到一个错误:
_GroovyUserScript_: 4: [Static type checking] - Cannot find matching method java.lang.Object#length(). Please check if the declared type is correct and if the method exists.
@ line 4, column 23.
def ln() { return fn().length() }
^
1 error
意味着方法的 return 类型被推断为 java.lang.Object
。现在,如果我将脚本更改为
@groovy.transform.TypeChecked
...
String fn() { return "result" }
...
脚本编译正确。
但是,我注意到以下脚本也可以正确编译:
@groovy.transform.TypeChecked
class C {
def fn() { return "result" }
}
def x() {
new C().fn().length()
}
x()
所以问题可能在于类型推断出于某种原因在相同 class 的方法之间不可传递?
在 groovy def
等于 Object
因此,第一种情况正确地失败了。
和 @groovy.transform.TypeChecked
只检查 class 或它注释的方法。在第二种情况下,方法 def x(){...}
没有注释(它在 class 之外声明)。
因此,在编译步骤没有执行任何验证。