当前位置: 首页 > news >正文

【解密 Kotlin 扩展函数】扩展属性与扩展函数类似(十九)

导读大纲

      • 1.1.1 扩展属性的创建和使用

1.1.1 扩展属性的创建和使用

  1. 之前, 我们已经了解声明 Kotlin 属性的语法

    • Kotlin中的顶级属性–传送门
    • 就像扩展函数一样,我们也可以指定扩展属性
    • 就像之前所说,属性和函数的区别在于前者是特征,后者是行为
      1. 相比扩展函数,扩展属性无非就是使用属性访问语法来访问扩展功能
  2. 在上一节中,我们定义扩展函数 lastChar()

    • 扩展函数 lastChar()–传送门
    • <1> 让我们把它转换成一个属性,这样就可以调用 “myText”.lastChar
    • 与函数一样,扩展属性看起来就像添加接收器类型的普通属性
      1. 必须始终定义getter,因为没有后备字段
        • 扩展属性就是通过自定义 getter 访问器来实现对已有类的功能扩展
      2. 由于这里的实现比较简单, 所以使用表达式体的形式定义get()
val String.lastChar: Char           // <1>get() = get(length - 1)
fun main() {println("Kotlin".lastChar)      // <1>
}
  1. 如果在 StringBuilder 上定义 lastChar 属性
    • <1> 可以将其作为 var, 因为 StringBuilder 的内容可以被修改
    • <2> 访问扩展属性与访问成员属性完全相同
    • <3> 这里直接通过赋值来调用扩展属性的setter访问器
      1. setter访问器内部可以调用接收器对象的任意方法,比如这里的setCharAt
var StringBuilder.lastChar: Char                // <1>get() = this.get(length - 1)set(value) {                                // <1>this.setCharAt(length - 1, value)       // <3>}
fun main() {println("Kotlin".lastChar)val sb = StringBuilder("Kotlin?")           // <2>println(sb.lastChar)                        // <2>// ?sb.lastChar = '!'                           // <3>println(sb)// Kotlin!
}
  1. 请注意,当需要从 Java 访问扩展属性时,必须明确调用其getter和setter
    • <1> 在Java中遵照 Java 的属性调用惯例来调用xxx.getLastChar(sb)
      1. 从这里看出扩展属性的本质还是静态性
      2. 底层其实还是挂载在 StringFunctions 类下静态方法
        • StringFunctions是通过注解"JvmName"来指定的, 这里不再赘述
import strings.StringFunctions;
public class Example {public static void main(String[] args){StringBuilder sb = new StringBuilder("Kotlin?");System.out.println(StringFunctions.getLastChar(sb));  // <1>StringFunctions.setLastChar(sb,'!');                  // <1>System.out.println(sb);}
}

http://www.mrgr.cn/news/37021.html

相关文章:

  • 阻塞型IO与非阻塞型IO
  • 【CSS/HTML】圣杯布局和双飞翼布局实现两侧宽度固定,中间宽度自适应及其他扩展实现
  • 嵌入式中CW32多功能测试笔实现
  • C语言指针系列1——初识指针
  • 解决毕业论文难题!推荐7款AI自动生成论文工具网站
  • C++11新特性—std:function模板类
  • 【C++位图】构建灵活的空间效率工具
  • Keyence_PL_MC_HslCommunication import MelsecMcNet
  • 【RabbitMQ】消息堆积、推拉模式
  • 【智能控制】第15章 智能优化算法,遗传算法
  • 【Linux】项目自动化构建工具-make/Makefile 详解
  • 代码随想录算法训练营第四十二天 | 188.买卖股票的最佳时机IV,309.最佳买卖股票时机含冷冻期,714.买卖股票的最佳时机含手续费
  • Java面试题之JVM20问
  • Redis常用命令笔记
  • Android——运行时动态申请权限
  • AIGAME平台的由来与未来展望 —— 蒙特加密基金推动区块链与AI融合创新
  • 红黑树|定义、左旋函数、右旋函数和对插入结点的修复
  • 【系统架构设计师】需要掌握的专业术语200个及简称
  • HttpServletRequestWrapper这个类有什么作用?
  • (done) 使用泰勒展开证明欧拉公式