예제에 사용 된 기능은 SAM constructor입니다. setOnEditorActionListener
청취자는 OnEditorActionListener
을 매개 변수로 사용합니다. 이 인터페이스는 구현해야하는 단일 메소드 만 가지고있어서 SAM (Single Abstract Method) 인터페이스로 만듭니다.
것 자바에서이 방법을 사용하기위한 전체 구문 :
mPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
attemptLogin();
return true;
}
});
코 틀린에 일대일 변환이 당신에게 줄 것이다 :
mPasswordView.setOnEditorActionListener(object: TextView.OnEditorActionListener{
override fun onEditorAction(v: TextView?, actionId: Int, event: KeyEvent?): Boolean {
attemptLogin()
return true
}
})
코 틀린은, 그러나, 당신을 수 있습니다 SAM 인터페이스를 매개 변수로 사용하는 메서드를 사용하여보다 간결한 구문으로 람다 대신 전달합니다. 이것은 SAM 변환을 호출됩니다
mPasswordView.setOnEditorActionListener { v, actionId, event ->
attemptLogin()
true
}
SAM 변환이 자동으로 람다에 해당하는 인터페이스를 결정하지만, 당신이 SAM 생성자라는 것을 사용하여 명시 적으로 지정할 수 있습니다,이 샘플 코드에서 무엇이다. SAM 생성자는 주어진 인터페이스를 구현하는 객체를 반환하고 전달한 람다를 단일 메소드의 구현으로 만듭니다.
mPasswordView.setOnEditorActionListener(TextView.OnEditorActionListener { v, actionId, event ->
attemptLogin()
true
})
setOnEditorActionListener
라는 단 하나의 방법이 있기 때문이 특정 상황에서 중복됩니다. 그러나 동일한 이름을 가진 여러 메소드가 매개 변수로 다른 인터페이스를 사용하는 경우 SAM 생성자를 사용하여 호출 할 메소드의 오버로드를 지정할 수 있습니다.
Official docs about SAM conversions
오케이 내 실수. 그것은 함수가 아닙니다 ... –