iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >Kotlin拓展函数怎么用
  • 870
分享到

Kotlin拓展函数怎么用

2023-06-29 00:06:44 870人浏览 独家记忆
摘要

这篇文章主要介绍了Kotlin拓展函数怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Kotlin拓展函数怎么用文章都会有所收获,下面我们一起来看看吧。原理拓展函数是kotlin里一个比较常用的特性,例如我

这篇文章主要介绍了Kotlin拓展函数怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Kotlin拓展函数怎么用文章都会有所收获,下面我们一起来看看吧。

原理

拓展函数是kotlin里一个比较常用的特性,例如我们可以给Context拓展一个toast方法:

// MainActivity.ktfun Context.toast(msg: String) {    Toast.makeText(this, msg, Toast.LENGTH_SHORT).show()}private fun foo(context: Context) {    context.toast("hello world")}

它的原理其实很简单,就是生成了一个toast方法。拓展函数的this指针实际上是这个生成方法的第一个参数:

public final class MainActivityKt {    public static final void toast(Context $this$toast, String msg) {        //参数判空        ...        // 拓展函数代码        Toast.makeText($this$toast, msg, 0).show();    }}

所以这个this指针实际上是由函数调用的地方传入的对象引用:

private final void foo(Context context) {    MainActivityKt.toast(context, "hello world");}

限制

知道了拓展函数的实现原理之后我们就能从原理去理解拓展函数的种种限制.

不能访问私有成员

由于编译成java之后,生成的拓展方法实际是靠第一个参数出入对象引用,然后使用这个对象引用去调用对象的方法。因此我们并没有权限在拓展函数里面调用私有方法:

class TestClass {    fun publicFun() {}    private fun privateFun() {}}fun TestClass.extFun() {    publicFun() // 正确,可以调用公有方法    privateFun() // 错误,不能调用私有方法}

拓展函数不能实现多态

由于拓展函数并不是真的给类增加一个成员函数,所以父类和子类的同名拓展函数并没有多态的特性。

例如我们为父类和子类拓展同一个foo()函数:

open class Parentclass Child : Parent()fun Parent.foo() {    println("parent")}fun Child.foo() {    println("child")}

然后只要将子类转换成父类,调用的拓展函数就是父类的拓展函数:

val child = Child()child.foo()(child as Parent).foo()// 输出:// child// parent

成员函数优先级高,拓展函数不能实现重写

当拓展函数与类本身或者父类的成员函数相同,在实际调用的时候会优先调用成员函数,并不会出现类似重写的效果.

例如我们为一个类编写了一个与成员函数相同的拓展函数,实际优先调用类成员函数:

open class Parent {    fun foo() {        println("foo")    }}fun Parent.foo() {    println("parent")}Parent().foo()// 输出:// foo

就算是为子类编写了一个与父类成员函数相同的拓展函数,也会优先调用父类的成员函数:

open class Parent {    fun foo() {        println("foo")    }}class Child : Parent()fun Child.foo() {    println("child")}Child().foo()// 输出:// foo关闭

为什么要使用Kotlin中的扩展函数

我们都知道在Koltin这门语言可以与Java有非常好的互操作性,所以扩展函数这个新特性可以很平滑与现有Java代码集成。甚至纯Kotlin的项目都可以基于Java库,甚至Android中的一些框架库,第三方库来构建。扩展函数非常适合Kotlin和Java语言混合开发模式。在很多公司一些比较稳定良好的库都是Java写,也完全没必要去用Kotlin语言重写。但是想要扩展库的接口和功能,这时候扩展函数可能就会派上用场。使用Kotlin的扩展函数还有一个好处就是没有副作用,不会对原有库代码或功能产生影响。先来看下扩展函数长啥样

给TextView设置加粗简单的例子

//扩展函数定义fun TextView.isBold() = this.apply {     paint.isFakeBoldText = true}//扩展函数调用activity.find<TextView>(R.id.course_comment_tv_score).isBold()

关于“Kotlin拓展函数怎么用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Kotlin拓展函数怎么用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。

--结束END--

本文标题: Kotlin拓展函数怎么用

本文链接: https://www.lsjlt.com/news/321473.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Kotlin拓展函数怎么用
    这篇文章主要介绍了Kotlin拓展函数怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Kotlin拓展函数怎么用文章都会有所收获,下面我们一起来看看吧。原理拓展函数是kotlin里一个比较常用的特性,例如我...
    99+
    2023-06-29
  • Kotlin原理详析之拓展函数
    目录原理限制不能访问私有成员拓展函数不能实现多态成员函数优先级高,拓展函数不能实现重写为什么要使用Kotlin中的扩展函数总结原理 拓展函数是kotlin里一个比较常用的特性,例如我...
    99+
    2024-04-02
  • JavaScriptES6的函数拓展
    目录ES6函数拓展函数的默认参数reset参数name属性箭头函数ES6函数拓展 函数的默认参数 之前的写法: function count(x, y) {     return x...
    99+
    2024-04-02
  • kotlin扩展函数
    一. 概念 Kotlin的扩展函数是一种特殊的函数,允许在不修改原始类定义的情况下向现有类添加新的函数。 扩展函数可以像普通函数一样使用,并且可以在任何地方调用。定义一个扩展函数,可以使用以下语法: ...
    99+
    2023-09-23
    kotlin android
  • Python 拓展之特殊函数(lambd
    写在之前 今天给大家介绍几个比较特殊的函数,他们具有函数式编程的特点,有人将它们视为 Python 可进行 “函数式编程” 的见证,至于什么是函数式编程,不是本篇文章的重点,感兴趣的可以去了解一下。老读者可能都知道,我非常推崇 Pytho...
    99+
    2023-01-30
    函数 Python lambd
  • Kotlin扩展函数超详细介绍
    目录1.扩展函数2.infix 关键字3.扩展函数文件4.重命名扩展函数1.扩展函数 1)当我们没法接触某个类的定义,或者某个类没有用open修饰无法继承时,我们可以通过扩展函数,来...
    99+
    2024-04-02
  • 怎么使用Kotlin来扩展
    今天小编给大家分享一下怎么使用Kotlin来扩展的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。实际上客户早在去年年初的时候便...
    99+
    2023-06-17
  • 【Kotlin】扩展函数 ① ( 扩展函数简介 | 为 Any 超类定义扩展函数 | private 私有扩展函数 | 泛型扩展函数 | 标准函数 let 函数是泛型扩展函数 )
    文章目录 一、扩展函数简介二、为 Any 超类定义扩展函数三、private 私有扩展函数四、泛型扩展函数五、标准函数 let 函数是泛型扩展函数 一、扩展函数简介 为 现有类...
    99+
    2023-09-01
    kotlin 扩展函数 泛型扩展函数 私有扩展函数 Any扩展函数
  • SpringBoot ApplicationContextAware拓展接口怎么使用
    这篇文章主要介绍“SpringBoot ApplicationContextAware拓展接口怎么使用”,在日常操作中,相信很多人在SpringBoot ApplicationContextAware拓展接口怎么使用问题...
    99+
    2023-07-06
  • kotlin函数怎么在java中使用
    本篇文章给大家分享的是有关kotlin函数怎么在java中使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于...
    99+
    2023-06-14
  • kotlin的扩展函数“let、run、also、apply”的作用和区别
    记录一下四个扩展函数的区别,使用经常记不住: Kotlin的扩展函数let、run、also、apply都是用于简化代码的工具,它们可以在不修改原始类或对象的情况下添加新的功能和行为。下面是它们的作用和区别: let:用于对一个可空对象进...
    99+
    2023-09-05
    kotlin 开发语言 android
  • 如何在Kotlin中定义变量与扩展函数
    如何在Kotlin中定义变量与扩展函数?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Kotlin定义变量kotlin 里的变量定义有两种,val 和 var,其...
    99+
    2023-05-31
    kotlin 定义变量 函数扩展
  • 怎么使用PostgreSQL扩展函数
    这篇文章主要讲解了“怎么使用PostgreSQL扩展函数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用PostgreSQL扩展函数”吧!例子.&nb...
    99+
    2024-04-02
  • C++ 函数库详解:系统功能的外延如何拓展
    c++++ 函数库可拓展系统功能,通过以下步骤使用:1. 引入标头文件;2. 声明函数库变量;3. 调用函数库函数。实战案例:自定义字符串操作函数库,添加逆序字符串函数,通过包含标头文件...
    99+
    2024-05-03
    c++ 函数库 标准库
  • Lambda和高阶函数怎么在Kotlin 中使用
    本篇文章为大家展示了Lambda和高阶函数怎么在Kotlin 中使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Lambda是什么Lambda是一种函数的表示方式(言外之意也就是说一个Lambda...
    99+
    2023-05-30
    kotlin lambda 高阶函数
  • 【Kotlin】Kotlin 函数总结 ( 具名函数 | 匿名函数 | Lambda 表达式 | 闭包 | 内联函数 | 函数引用 )
    文章目录 一、函数头声明二、函数参数1、默认参数值2、具名参数 三、Unit 函数四、TODO 函数抛出异常返回 Nothing 类型五、反引号函数名六、匿名函数七、匿名函数的函数类型八、匿名函数的隐式返回九、匿名函数参数十、...
    99+
    2023-08-19
    kotlin 具名函数 匿名函数 Lambda表达式 内联函数
  • 微信小程序开发拓展接口怎么用
    这篇文章主要为大家展示了微信小程序开发拓展接口怎么用,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“微信小程序开发拓展接口怎么用”这篇文章吧。wx.arrayBufferToBase64(array...
    99+
    2023-06-26
  • win7系统隐藏拓展名怎么设置
      win7系统隐藏拓展名怎么设置?有的系统安装好了之后,它的默认文件设置会将文件的拓展名进行隐藏。如果我们需要更改拓展名的话,就需要去进行拓展名的显示设置了。那么这个设置怎么操作,接下来和大家一起来分享。  win7系统隐藏拓展名设置显示...
    99+
    2023-07-10
  • ECMAscrip函数的扩展怎么使用
    本篇内容主要讲解“ECMAscrip函数的扩展怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ECMAscrip函数的扩展怎么使用”吧!1.函数参数的默认值1.1函数参数指定默认值在ECM...
    99+
    2023-06-21
  • 使用Kotlin怎么定义函数与声明变量
    使用Kotlin怎么定义函数与声明变量?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Kotlin基础教程之函数定义与变量声明可以看到,函数定义就是 <访问控制符> ...
    99+
    2023-05-31
    kotlin 声明变量 函数定义
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作