0%

Kotlin:委托 和 动态代理 的奇妙组合

Callback是事件驱动的灵魂,Interface作为具体形式服务于各种场景。但是对于包含多个方法的接口,即使只会用到其中一个,也不得不容忍大量的空方法实现样板代码;当然我们可以创建一个公共的中间类预先实现需要的接口,其它地方使用时就可以直接继承该中间类并只需重写需要的方法即可,然而这样又会产生占用继承位、不同的接口需要不同的中间类等新问题,那么到了kotlin这儿又会有怎样的解决方案?

这里以 AnimatorListener 为例,直接展示最终的解决方案:

1
2
3
4
5
6
7
8
9
inline fun <reified T : Any> noOpDelegate(): T {
val javaClass = T::class.java
return Proxy.newProxyInstance(javaClass.classLoader, arrayOf(javaClass)) {_,_,_ ->
} as T
}

animator.addListener(object : Animator.AnimatorListener by noOpDelegate() {
// 重写关心的方法即可
})




意犹未尽?😝