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에는 다음과 같은 서명이 있습니다.
FileCollection plus (FileCollection 컬렉션)
이 컬렉션과 지정된 컬렉션의 합집합을 포함하는 FileCollection을 반환합니다. 반환 된 컬렉션은 라이브이며 두 소스 컬렉션의 변경 사항을 추적합니다.
그러나 ArrayList
매개 변수로를 전달하고 있습니다. 은 ArrayList
하지 않은 것입니다 FileCollection
.
그러나 a FileCollection
도 Iterable
이므로 실제로 호출하는 것은 다음 서명 이있는 표준 Groovy 메서드 Interable.plus 입니다.
public Collection plus (반복 권)
두 iterable의 합집합으로 컬렉션을 만듭니다. 왼쪽 이터 러블이 Set이면 반환 된 컬렉션은 Set이되고 그렇지 않으면 List가됩니다. 이 연산은 항상 결과에 대한 새 객체를 생성하지만 피연산자는 변경되지 않습니다.
"left"iterable은 a가 아니기 때문에 Set
(a FileCollection
), 당신은 List
돌아오고 Groovy ArrayList
는 구현에서 를 사용합니다 .