button.setOnClickListener(new onClickListener() {
@Override
public void onClick(View v) {
/*...*/
}
});button.setOnClickListener(view -> { /*...*/ });button.setOnClickListener{ view -> /*...*/ }함수형 인터페이스를 파라미터로 받는 모든 자바 메서드에 람다를 전달할 수 있음
void postponeComputation(int delay, Runnable computation);
코틀린에서 이 메서드를 호출 할 때 람다를 인자로 보낼 수 있음
postponeComputation(1000) { println(42) }
Runnable을 명시적으로 구현하는 익명 객체를 만들어 사용할 수도 있음
postponeComputation(1000, object: Runnable {
override fun run() {
println(42)
}
})
람다의 익명 클래스 인스턴스 재사용
SAM 생성자 → 람다를 단일 추상 메서드 인터페이스의 인스턴스로 명시적 반환을 해줌
컴파일러가 자동으로 변환해주지 못하는 상황에서 사용
값을 반환하기 위해 SAM 생성자 사용
fun createAllDoeRunnable(): Runnable {
return Runnable { println("All done!") }
}
fun main() {
createAllDoneRunnable().run()
//All done!
}
람다로 생성한 함수형 인터페이스 인스턴스를 변수에 저장
val listener = onClickListener { view ->
val text = when (view.id) {
button1.id -> "First button"
button2.id -> "Second button"
else -> "Unknown button"
}
toast(text)
}
button1.setOnClickListener(listener)
button2.setOnClickListener(listener)
람다와 리스너 등록/해제