作为标题,这两个 defs 在Groovy中到底有什么区别?
也许是文档问题,我什么也找不到...
答案 0 :(得分:1)
不带有static
的方法声明将方法标记为实例方法。而使用static
进行的声明将使此方法变为静态-可以在不创建该类实例的情况下调用该方法-请参见https://www.geeksforgeeks.org/static-methods-vs-instance-methods-java/
def
将值定义为鸭子类型。值的功能不取决于其类型,而是在运行时进行检查。在运行时会回答是否可以在该值上调用方法的问题-请参见optional typing。
static def
意味着该方法将返回鸭子类型的值,并且可以在没有该类实例的情况下调用该方法。
示例:
假设您具有以下两个类:
class StaticMethodClass {
static def test(def aValue) {
if (aValue) {
return 1
}
return "0"
}
}
class InstanceMethodClass {
def test(def aValue) {
if (aValue) {
return 1
}
return "0"
}
}
您可以调用StaticMethodClass.test("1")
,但必须先创建InstanceMethodClass
的实例,然后才能调用test
-像new InstanceMethodClass().test(true)
。