gradle : fileCollection.plus ()는 ArrayList 모순되는 인터페이스를 반환합니다.

Aug 21 2020

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-

답변

BjørnVester Aug 21 2020 at 10:45

plus방법은 과부하, 당신은 잘못된 찾고있다.

연결 한 FileCollection.plus 용 API에는 다음과 같은 서명이 있습니다.

FileCollection plus (FileCollection 컬렉션)

이 컬렉션과 지정된 컬렉션의 합집합을 포함하는 FileCollection을 반환합니다. 반환 된 컬렉션은 라이브이며 두 소스 컬렉션의 변경 사항을 추적합니다.

그러나 ArrayList매개 변수로를 전달하고 있습니다. 은 ArrayList하지 않은 것입니다 FileCollection.

그러나 a FileCollectionIterable이므로 실제로 호출하는 것은 다음 서명 이있는 표준 Groovy 메서드 Interable.plus 입니다.

public Collection plus (반복 권)

두 iterable의 합집합으로 컬렉션을 만듭니다. 왼쪽 이터 러블이 Set이면 반환 된 컬렉션은 Set이되고 그렇지 않으면 List가됩니다. 이 연산은 항상 결과에 대한 새 객체를 생성하지만 피연산자는 변경되지 않습니다.

"left"iterable은 a가 아니기 때문에 Set(a FileCollection), 당신은 List돌아오고 Groovy ArrayList는 구현에서 를 사용합니다 .