Разница между "def" и "static def" в Gradle - PullRequest
1 голос
/ 04 октября 2019

Как видно из названия, в чем разница между этими двумя определениями в Groovy?

Может быть, это проблема с документацией, я ничего не могу найти ...

1 Ответ

1 голос
/ 04 октября 2019

Объявление метода без static помечает метод как метод экземпляра. Принимая во внимание, что объявление с static сделает этот метод статическим - его можно вызывать без создания экземпляра этого класса - см. https://www.geeksforgeeks.org/static-methods-vs-instance-methods-java/

def в groovy определяет значение как тип с уткой. Возможности значения не определяются его типом, они проверяются во время выполнения. На вопрос, можно ли вызвать метод для этого значения, дан ответ во время выполнения - см. необязательный ввод .

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).

...