结论
kotlin中没有匿名内部类的概念,可以使用对象表达式或者对象声明达到匿名内部类的效果
对象表达式
单接口单函数
btn.setOnClickListener(object : OnClickListener{// 处理单击事件逻辑***});
单接口多函数
window.addMouseListener(object : MouseAdapter() {override fun mouseClicked(e: MouseEvent) {// ...}override fun mouseEntered(e: MouseEvent) {// ...}})
实现多个接口
val a = 10val listener = object : Info("submit"),IClickListener {override fun doClick() {println("a:$a")}}listener.doClick() // 打印 a:10
doOnEach的实现
fun testDoOnEachOperator() {Observable.just(5).compose(useSchedulers()).doOnRequest {Log.i("grass", "doOnRequest: $it")}.doOnNext {Log.i("grass", "doOnNext: ")}.doOnEach(object : Observer<Int> {override fun onNext(t: Int?) {Log.i("grass", "each onNext: " + t)}override fun onError(e: Throwable?) {Log.i("grass", "each onError: " + e.toString())}override fun onCompleted() {Log.i("grass", "each onCompleted: ")}}).subscribe({value ->Log.i("grass", "onNext: " + value)}, {throwable ->Log.i("grass", "onError: " + throwable.toString())}, {Log.i("grass", "onComplete ")})}
对象声明
对象声明必须是全局的
class MainActivity : AppCompatActivity() {object doOnEachObserver : Observer<Int> {override fun onCompleted() {TODO("not implemented") //To change body of created functions use File | Settings | File Templates.}override fun onError(e: Throwable?) {TODO("not implemented") //To change body of created functions use File | Settings | File Templates.}override fun onNext(t: Int?) {TODO("not implemented") //To change body of created functions use File | Settings | File Templates.}}
this@xxxx的用法
匿名对象内部访问外部对象
## MainActivityfindViewById<ImageButton>(R.id.notify_emui_btn).setOnClickListener {showNotification(this@MainActivity, R.mipmap.emui_icon)}
