그래,이게 꽤 특별한 kotlin-dsl이지만, 전체적으로 kotlin 언어 자체에 적용된다고 생각합니다. 그래서 나는 그 태그를 사용하지 않을 것입니다. (그것이 SAM와 클래스이기 때문에)이 코 틀린에 작동합니다, 그래서 이상적으로Kotlin이 gradles의 Action 클래스를 람다로 변환 할 수 없다
@HasImplicitReceiver
public interface Action<T> {
/**
* Performs this action against the given object.
*
* @param t The object to perform the action on.
*/
void execute(T t);
}
: 다음 Gradle을 API에서
이 클래스Action<T>
는 다음과 같이 정의된다
val x : Action<String> = {
println(">> ${it.trim(0)}")
Unit
}
그러나 나는 다음과 같은 두 가지 오류를 얻을 :
Unresolved reference it
Expected Action<String> but found() -> Unit
FWIW을, 심지어 Action<String> = { input: String -> ... }
는 않습니다 작동하지 않습니다.
여기에 정말 흥미로운 부분이 있습니다. 나는 (BTW, 작동) 인 IntelliJ에서 다음을 수행하는 경우 :
object : Action<String> {
override fun execute(t: String?) {
...
}
}
IntelliJ에 내가 할 때, 내가 얻을 제안 Convert to lambda
, 아빠 : 더
val x = Action<String> {
}
을하지만, it
은 여전히 해결되지 않았다. 지금 지정 :
val x = Action<String> { input -> ... }
다음과 같은 오류가 제공 Could not infer type for input
및 Expected no parameters
. 누군가가 계속하고있는 일을 도와 줄 수 있습니까? Gradle을에서 Action
클래스 HasImplicitReceiver
의 주석을 붙일 수 있기 때문입니다
val x: Action<String> = Action { println(it) }
모두 저에게 잘 맞습니다. 어쩌면 오래된 Kotlin 플러그인 버전일까요? – FWeigl