Gradle中“ def”和“ static def”之间的区别

时间:2019-10-04 08:10:07

标签: gradle groovy android-gradle-plugin build.gradle

作为标题,这两个 defs 在Groovy中到底有什么区别?

也许是文档问题,我什么也找不到...

1 个答案:

答案 0 :(得分:1)

不带有static的方法声明将方法标记为实例方法。而使用static进行的声明将使此方法变为静态-可以在不创建该类实例的情况下调用该方法-请参见https://www.geeksforgeeks.org/static-methods-vs-instance-methods-java/

groovy中的

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)