코틀린 SAM 인터페이스의 람다식 관련
코틀린 코드 사이에서는 SAM 인터페이스 변환을 지원하지 않는다.
기존의 자바코드의 경우
view.setOnClickListener {
//TODO
}
와 같은 형태를 지원하는데
이는 OnClickListener와 setOnClickListener가 모두 Java로 구현이 되어있기에 가능하다.
OnClickListener만 Java로 구현되었고 setOnClickListener는 Kotlin으로 구현되어 있다면
view.setOnClickListener(OnClickListener {
//TODO
})
와 같은 형태로 구현되어진다.
안에 있는 OnClickListener를 밖으로 빼낼 수 없다.
만약 두 코드가 모두 Kotlin으로 구현되어진 상태라면
익명객체인 object를 이용해야 한다.
함수형 패러다임에서 다루어지는 부분이니 궁금하다면 해당 부분을 공부해야 한다.
참고자료)
https://jinn-blog.tistory.com/23
코틀린(Kotlin) | SAM Conversion
발단 오브젝트가 함수형 인터페이스면 접두어로 인터페이스 파입을 가진 람다를 생성할 수 있다하여 따라해봄. @FunctionalInterface interface FunctionalInterface { fun apply() } fun main() { val f = Functi..
jinn-blog.tistory.com
https://stackoverflow.com/questions/43737785/kotlin-interface-does-not-have-constructors
Kotlin: Interface ... does not have constructors
I am converting some of my Java code to Kotlin and I do not quite understand how to instantiate interfaces that are defined in Kotlin code. As an example, I have an interface (defined in Java code):
stackoverflow.com