向KotlinAction中函数的进阶理解——顶层以及拓展探讨

本文深入探讨Kotlin的顶层函数与属性,解释它们的意义与本质,以及如何作为包内成员使用。文章进一步讲解了拓展函数和属性,阐述其用于改进现有API的功能,同时展示了基本用法和潜在的优缺点。最后,提出了处理函数引用冲突的策略,并强调理解这些概念的本质是关键。
摘要由CSDN通过智能技术生成

目录

向KotlinAction中函数的进阶理解

顶层函数与属性的意义与本质

顶层函数及属性的进阶——拓展函数及属性

基本使用:

其优劣点

总结

 


 

向KotlinAction中函数的进阶理解

最近工作繁忙,心得体会难以总结;偶得闲时,查阅Kotlin Action,笔录心得。

 

顶层函数与属性的意义与本质

消除特定一些仅包含静态函数容器类例如JDK中的Collections,其顶层函数与属性不在需要被容器类包裹,只位于代码文件中的顶层,并不属于任何类,并且其顶层函数仍然能成为包内成员,仅仅需要使用import进行导入。

其写法如下:

@file:JvmName("TLFAADemo")

package kotlin_demo.function

/**
 * 所谓顶层函数:去除包裹静态函数类容器,使其存在包内,简化类的创建,实则在jvm运行编译的时候还是会创建一个类,
 * 如果没有使用注解为该文件命名的时候,该文件名字则为该类名。
 * 如下:
 * @file:JvmName("TLFAADemo")
 * 使用注解将该文件类名编译为TLFAADemo
 * */
fun topLevelFunction(): String = "this is a top level function"

/**
 * 所谓顶层属性,可以看成是一个类外部属性成员,作为一些单独的数据片使用。
 * val 修饰的作用说明是不可变的只能有get方法调出
 * var 修饰的作用说明是可变的拥有get和set方法
 * const 等价于 public static final的作用
 * */

val authorName = "易庞宙"

var canSetValue = "zero"

const val resulut = "易庞宙 is already set"

其运行本质,Kotlin被研发到被开发人员钟爱并运用到开发的过程,其组织本着一种为JVM提供更好的编译这一理念。所以顶层函数运行最终也会编译成为字节码。所以其本质上只是在代码写法上简化了类包裹以及引用的写法而已,这也得益于Kotlin在编译期间做一些东西,使得我们这些开发人员能够使用更为简易可阅读的语言进行编写。

上述其顶层函数的代码的Kotlin字节码

// ================kotlin_demo/function/TLFAADemo.class =================
// class version 50.0 (50)
// access flags 0x31
public final class kotlin_demo/function/TLFAADemo {


  @Lkotlin/jvm/JvmName;(name="TLFAADemo") // invisible

  // access flags 0x19
  public final static topLevelFunction()Ljava/lang/String;
  @Lorg/jetbrains/annotations/NotNull;() // invisible
   L0
    LINENUMBER 12 L0
    LDC "this is a top level function"
    ARETURN
   L1
    MAXSTACK = 1
    MAXLOCALS = 0

  // access flags 0x1A
  private final static Ljava/lang/String; authorName = "易庞宙"
  @Lorg/jetbrains/annotations/NotNull;() // invisible

  // access flags 0x19
  public final static getAuthorName()Ljava/lang/String;
  @Lorg/jetbrains/annotations/NotNull;() // invisible
   L0
    LINENUMBER 21 L0
    GETSTATIC k
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值