Kotlin 의 자바 함수 식 인터페이스 사용
lambda
기대 함수 식 인터페이스 에 전달 할 수 있 는 방법
void postponeCompution(int delay,Runnable computation);
Kotlin 에 서 는 그것 을 호출 하여 하나의
lambda
를 실제 인삼 으로 전달 할 수 있 습 니 다.컴 파일 러 는 자동 으로 그것 을 Runnable
의 인 스 턴 스 로 변환 합 니 다.postponeCompution(1000){println(42)}
표 시 를 통 해
Runnable
을 실현 한 익명 대상 을 만 드 는 것 도 같은 효 과 를 얻 을 수 있 습 니 다.postponeCompution(1000,object:Runnable{
override fun run(){
println(42)
}
})
그러나 여 기 는 조금 다 릅 니 다. 대상 을 표시 할 때 호출 할 때마다 새로운 인 스 턴 스 를 만 듭 니 다.사용
lambda
을 사용 하면 lambda
함수 의 변 수 를 사용자 정의 하 는 데 접근 하지 않 으 면 해당 익명 클래스 인 스 턴 스 는 여러 번 호출 할 때 다시 사용 할 수 있 습 니 다. postponeCompution(1000){println(42)
따라서 완전 등가 의 실현 은 다음 코드 의 표시
object
성명 이 어야 합 니 다. Runnable
인 스 턴 스 를 하나의 변수 에 저장 하고 호출 할 때마다 이 변 수 를 사용 합 니 다.val runnable = Runnable{ println(42) }
fun handleCompution(){
postponeCompution(1000,runnable)
}
lambda
이 를 둘 러 싼 역할 영역 에서 변 수 를 포착 하면 호출 할 때마다 같은 인 스 턴 스 를 다시 사용 할 수 없습니다.이 경우 호출 할 때마다 컴 파일 러 가 새 대상 을 만 듭 니 다.fun handleCompution(id:String){
postponeCompution(1000){println(id)}
}
SAM 구조 방법: lambda 를 함수 식 인터페이스 로 표시 합 니 다.
SAM
구조 방법 은 컴 파일 러 가 생 성 한 함수 로 lambda
에서 함수 식 인터페이스 인 스 턴 스 로 전환 하 는 것 을 실행 합 니 다.만약 한 방법 이 하나의 함수 가 인터페이스의 인 스 턴 스 라면, 직접 lambda
로 돌아 갈 수 없 으 며, SAM
구조 방법 으로 그것 을 포장 해 야 한다.fun createAllDoneRunnable() : Runnable{
return Runnable{ println("All done!") }
}
SAM
구조 방법 은 하나의 매개 변수 만 받 습 니 다. 함수 식 인터페이스 단일 추상 적 인 방법 체 lambda
로 사용 되 고 이 인 터 페 이 스 를 실현 하 는 인 스 턴 스 를 되 돌려 줍 니 다.val listener = OnClickListener { view ->
val text = when(view.id){
R.id.button1 -> "First button"
R.id.button2 -> "Second button"
else -> "Unknow Button"
}
toast(text)
}
button1.setOnClickListener(listener)
button2.setOnClickListener(listener)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.