【发布时间】:2018-01-17 07:28:06
【问题描述】:
我在 android 中创建了一个自定义视图。其中一种方法的签名如下:
fun show(CategoryFilterModel model) {/*...*/}
而且效果很好。现在我想创建一个重载函数,如果我通过将它添加到自定义视图类来实现它,它看起来像这样:
fun show(ShopFilterModel model) {/*...*/}
注意类型不同所以这是一个方法重载。
我想到我可以改为使用 kotlin 中的扩展来为类添加另一个方法。
所以它会像这样:
fun MyCustomView.show(ShopFilterModel: model){
}
这是建议还是我应该只添加带有扩展的实用方法?有任何开销吗?
【问题讨论】:
-
它将编译成
static show(MyCustomView self, ShopFilterModel model)。运行时开销(如果有的话)将非常小。 -
感觉它会编译成一个静态的我如何引用对象变量,我假设我不能,对吗?
-
它有
self参数,这是保存变量的实例。但是你不能访问任何private成员,这可能是一个阻碍。 -
扩展乐趣和重载存在一个陷阱:如果成员的签名与您的扩展乐趣兼容,但更一般地说,它会在考虑您之前被选中。
-
了解一些缺点非常好。谢谢