在java中创建匿名内部类,只需要把这个类直接new 出来,下面以一个interface给为例子,如下
public interface OnItemClickListener<T> {
void onItemClick(ViewHolder viewHolder, T data, int position);
}
mAdapter.setOnItemClickListener(new OnItemClickListener<String>() {
@Override
public void onItemClick(ViewHolder viewHolder, String data, int position){
}
});
在kotlin中用对象表达式替代java匿名内部类的语法
1.object方式
mAdapter!!.setOnItemClickListener(object : OnItemClickListener<String>{
override fun onItemClick(viewHolder: ViewHolder?, data: String?, position: Int){
}
})
看起来用object方法创建匿名内部类和java的方式差不多,下面用lambda再简化下代码
2.lambda
它的参数(如果有的话)在""->""前定义,参数类型可能是省略的。 函数体跟在""->""后面。lambda方式要求此接口只能有一个抽象方法需要实现,如有有两个要实现就要用object方式。
mAdapter!!.setOnItemClickListener { viewholder, data, position ->
}
3.单个参数情况
在只有一个参数的情况下,只需要一个括号,用it替代参数
view.setOnClickListener {
}