在java中創(chuàng)建匿名內(nèi)部類,只需要把這個(gè)類直接new 出來,下面以一個(gè)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中用對(duì)象表達(dá)式替代java匿名內(nèi)部類的語法
1.object方式
mAdapter!!.setOnItemClickListener(object : OnItemClickListener<String>{
override fun onItemClick(viewHolder: ViewHolder?, data: String?, position: Int){
}
})
看起來用object方法創(chuàng)建匿名內(nèi)部類和java的方式差不多,下面用lambda再簡化下代碼
2.lambda
它的參數(shù)(如果有的話)在""->""前定義,參數(shù)類型可能是省略的。 函數(shù)體跟在""->""后面。lambda方式要求此接口只能有一個(gè)抽象方法需要實(shí)現(xiàn),如有有兩個(gè)要實(shí)現(xiàn)就要用object方式。
mAdapter!!.setOnItemClickListener { viewholder, data, position ->
}
3.單個(gè)參數(shù)情況
在只有一個(gè)參數(shù)的情況下,只需要一個(gè)括號(hào),用it替代參數(shù)
view.setOnClickListener {
}