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
。