私は「defaultConfig」を見たとき、私は、Androidのプラグインを理解しようとしている私は方法がgradle - どのようにインターフェイスorg.gradle.api.Actionは動作しますか?
public void defaultConfig(Action<ProductFlavor> action) {
this.checkWritability();
action.execute(this.defaultConfig);
}
で見つけて(this.defaultConfit)action.executeを呼び出すことがthis.defaultConfigに対してクロージャを呼び出します。
これは混乱しています。そのため、私はInterface Actionの文書を見て、それが持つ魔法を見ました。
Actionインターフェースのdocによると、action.execute(obj)を呼び出すと、実際には "指定されたオブジェクトに対してこのアクションを実行します"、ここで指定されたオブジェクトはobjです。
これはどのように機能しますか?
ASAIK、objに対してメソッドを呼びたい場合は、obj:it.doSth()
を参照するために "it"を使用します。そうでない場合、メソッドは "this"に対して呼び出されます。
Actionインターフェイスを使用する場合、「it」は必要なくなり、このインターフェイス内のメソッド呼び出しは「it」に対して呼び出されます。
は、私もそれをテストするためにいくつかのコードを記述します。私のインターフェースMyAction
は「それ」だけで動作するはずです、しかし、それはしませんでしたなしのActionインタフェースは、その後actionNameのを呼び出して、持っている魔法を持っていた
class Main {
Test test = new Test()
test.actionReceiver {
// actionName "test ok"
it.actionName "test ok"
}
}
static interface MyAction<T> {
void execute(T)
}
static class MyActionReceiver {
void actionName(String name) {
println name
}
}
static class Test {
MyActionReceiver actionReceiver = new MyActionReceiver()
void actionReceiver(MyAction<MyActionReceiver> action) {
action.execute(actionReceiver)
}
}
}
場合。
私の質問は、Actionインターフェイスがどのように機能するのですか。インターフェイスを同じように動作させるにはどうすればよいですか。
カスタムタスクを記述する場合は
は、あなたは、単に@TaskActionアノテーションで、あなたの主なアクションに注釈を付けることができますGroovyの基礎を学ぶべきか、特にCl痛みの仕事。その知識がなければ、プラグイン用のコードを記述するのは非常に困難です。 http://groovy-lang.org/closures.htmlを参照してください。 – Jolta