我为按钮编写了两个不同的侦听器:
myButton.setOnClickListener{myOnClick()}
myButton.setOnKeyListener{myOnKeyListener()}
第一个对于编译器是可以的。但是第二个错误。它说期望类型为View!,Int,KeyEvent!的3个参数!
考虑到这些是View类中的侦听器:
public interface OnClickListener {
void onClick(View v);
}
public interface OnKeyListener {
boolean onKey(View v, int keyCode, KeyEvent event);
}
关于为什么要在一种情况下要求我提供参数,而在另一种情况下却没有要求我的想法?
这是因为OnClickListener.onClick
仅采用一个参数,但OnKeyListener.onKey
却采用了三个参数。在Kotlin中,您无需指定单个lambda参数,并且可以使用隐式名称it
进行访问。但是,当lambda需要更多参数时,您将无法再使用it
来访问它们。这就是为什么您必须明确为其命名的原因。