【问题标题】:Kotlin - can i use an extension for method overloading?Kotlin - 我可以使用扩展来重载方法吗?
【发布时间】: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 成员,这可能是一个阻碍。
  • 扩展乐趣和重载存在一个陷阱:如果成员的签名与您的扩展乐趣兼容,但更一般地说,它会在考虑您之前被选中。
  • 了解一些缺点非常好。谢谢

标签: android kotlin


【解决方案1】:

它不仅适用于实用程序,您可以阅读这篇很棒的 answer,它列出了几乎所有用例。

恕我直言,如果您可以控制要使用方法扩展的类,则直接向其添加方法与使用扩展方法相比没有问题。然而,从技术上讲,您可以考虑这样做。请注意 calling such an extension function from Java 不是很惯用,因为它将被编译为 static 函数。如果要从 Java 调用它,我宁愿尽可能使用普通方法。

【讨论】:

    猜你喜欢
    • 2011-11-21
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-15
    • 2014-07-01
    • 1970-01-01
    • 2020-06-15
    相关资源
    最近更新 更多