Kotlin 可以动态为对象绑定一个额外对象吗?
我有一个方法,每次都必须传入一个固定的对象 paint
,因为这个函数会被频繁调用,所以我不能在内联函数中创建对象。
inline fun Canvas.drawPoint(
point: PointF,
paint: Paint) {
drawPoint(point.x, point.y, paint)
}
但是我很多地方都会调用这个方法。
//(Canvas.apply(..,..))
drawPoint(pointA, pointPaint)
drawPoint(pointB, pointPaint)
drawPoint(pointC, pointPaint)
drawPoint(pointD, pointPaint)
可以看到每次都会传入一个pointPaint
对象。
所以我在想有没有类似这样一个功能
//(Canvas.apply(..,..))
bind(pointPaint)
drawPoint(pointA)
drawPoint(pointB)
drawPoint(pointC)
drawPoint(pointD)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
完美符合你要求的方式肯定是没有的,因为 bind 函数不可能改变另一个函数内部的局部变量。
折中的方式也有很多,比如定义一个包级属性:
然后原来的函数改为:
方便使用还可以再定义一个函数来确保 drawPaint 能被准确的赋值和释放:
这样使用时就是:
还有一种方式是定义一个包装类,并在其中定义一个包含带接收者 Lambda 表达式的参数的函数(接收者为 Canvas),然后将扩展函数定义到这个类中:
然后定义含有接收者为这个包装对象 Lambda 参数的函数:
这样用时更方便一些: