2014-10-11 2 views
0

В виде Gradle сценария сборки, когда мы объявляем задачу следующим образом:определение задач/определение в Gradle

task lol 

lol << { 
    prinln "lol's action!" 
} 

и выполнить его как gradle -q lol он работает отлично. Мой вопрос в том, почему lol экземпляр задачи уже создан и NullPointerException не вызван? Разве декларация task lol объявляет и определяет задачу одновременно?

+0

Это неясно. Что, возможно, бросит здесь NPE? –

+0

@OliverCharlesworth В Java JLS 4.12.5: _ Для всех ссылочных типов (§4.3) значение по умолчанию равно null. Это объявление не содержит инициализатора, так как я предполагаю, что он был инициализирован по умолчанию с помощью «null». –

+0

Хорошо, но Gradle - это не Java. Это DSL, построенный на вершине Groovy. JLS не поможет вам его интерпретировать. –

ответ

2

задача на самом деле метод на Project и task lol вызывает этот метод, используя optional parens. Существует некоторая магическая магия, чтобы превратить lol в строку. Свойство lol Task в проекте затем имеет метод leftShift, вызванный с помощью оператора <<. См. operator overloading.

Смежные вопросы