gradle:fileCollection.plus()はArrayListと矛盾するインターフェースを返します
gradle:fileCollection.plus()は、インターフェイスと矛盾するArrayListを返します。
def foo = files([]); // foo: gradle FileCollection
println foo.class
foo = foo.plus(sourceSets.main.java.srcDirs); // foo: java.util.ArrayList
println foo.class
ただし、FileCollectionを返す必要があります。
https://docs.gradle.org/current/javadoc/org/gradle/api/file/FileCollection.html#plus-org.gradle.api.file.FileCollection-
回答
plus
メソッドはオーバーロードされ、あなたは間違ったものを見ています。
リンクしたFileCollection.plusのAPIには、次の署名があります。
FileCollectionplus(FileCollectionコレクション)
このコレクションと指定されたコレクションの和集合を含むFileCollectionを返します。返されたコレクションはライブであり、両方のソースコレクションへの変更を追跡します。
ただしArrayList
、パラメータとしてを渡しています。アンはArrayList
ありませんFileCollection
。
ただし、aFileCollection
もであるIterable
ため、実際に呼び出すのは、次のシグネチャを持つ標準のGroovyメソッドInterable.plusです。
パブリックコレクションプラス(Iterableright)
2つの反復可能オブジェクトの和集合としてコレクションを作成します。左の反復可能オブジェクトがセットの場合、返されるコレクションはセットになり、それ以外の場合はリストになります。この操作では、オペランドは変更されませんが、常に結果の新しいオブジェクトが作成されます。
「左」の反復可能オブジェクトはSet
(ではありませんFileCollection
)ではないため、List
元に戻り、GroovyArrayList
は実装でたまたまを使用します。