gradle:fileCollection.plus()返回与ArrayList矛盾的接口(interface)。

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具有签名:

但是,您正在传递ArrayList作为参数。 ArrayList不是FileCollection
但是,FileCollection也是Iterable,因此您真正要调用的是具有以下签名的标准Groovy方法Interable.plus:

因为“左”迭代不是Set(它是FileCollection),所以您会得到一个List,而Groovy恰好在实现中使用了ArrayList

09-26 14:16