Kotlin标准函数与静态方法应用详解

作者:z啵唧啵唧 时间:2022-01-21 10:45:33 

标准函数

  • 标准函数就是在Standard.kt文件中定义的函数,任何Kotlin代码都可以自由地调用所有的标准函数

  • let函数就属于是一个标准函数,经常配合?.操作符来进行判空处理

with函数

with函数接收两个参数,第一参数可以是任何类型的对象,第二个参数是一个Lambda表达式

with函数会在Lambda表达式中提供第一个参数的上下文,并使用Lambda表达式的最后一行代码作为函数的返回值

示例代码

val res = with(obj) {
   //这里是obj对象的上下文
   "value"//这里是with函数的返回值
}

with函数的作用.假如现在有个需求让吃完所有的水果并且将结果打印出来,代码可以这样写

fun main() {
   doSomething()
}
fun doSomething() {
   val list = listOf<String>("Apple", "Banana", "Pear")
   val sb = StringBuilder()
   sb.append("Start eating fruits.\n")
   for (fruits in list) {
       sb.append(fruits).append("\n")
   }
   sb.append("Ate all fruits.")
   val res = sb.toString()
   println(res)
}

利用with函数可以这样写,可以看到在Lambda表达式中,都是StringBuilder的上下文,那么就不需要我们通过StringBuilder的实例调用append()方法了,而是直接使用append()方法即可.

fun withTest() {
   val list = listOf<String>("Apple", "Banana", "Pear")
   val res = with(StringBuilder()) {
       append("Start eating fruits.\n")
       for (fruits in list) {
           append(fruits)
           append("\n")
       }
       append("Ate all fruits.")
       toString()//最后一行就是函数的返回值
   }
   println(res)
}

run函数

  • run函数和with函数基本类似,区别就是,run函数不能直接调用,需要在某个对象的基础上进行调用

  • 其次run函数只接受一个Lambda参数,并且在Lambda表达式中提供调用对象的上下文.

  • 其他和with函数都是一样的

  • 使用run函数完成上述需求的实例

fun runTest() {
   val list = listOf<String>("Apple", "Banana", "Pear")
   //将StringBuilder调出来,用来调用run函数
   val res = StringBuilder().run {
       append("Start eating fruits.\n")
       for (fruits in list) {
           append(fruits)
           append("\n")
       }
       append("Ate all fruits.")
       toString()
   }
   println(res)
}

apply函数

  • apply函数和run函数基本一样,就是apply函数不能指定返回值,只能返回调用调用者的本身

  • apply函数实例

fun applyTest() {
   val list = listOf<String>("Apple", "Banana", "Pear")
   val res = StringBuilder().apply {
       append("Start eating fruits.\n")
       for (fruits in list) {
           append(fruits)
           append("\n")
       }
       append("Ate all fruits.")
   }
   println(res.toString())
}

静态方法

  • 静态方法又叫做类方法,就是说不需要实例,直接用类就可以进行调用,一般会将工具类中的方法设置为静态方法,方便调用

  • 在java当中的静态方法就是使用static关键字修饰的方法

  • 但是在kotlin当中没有直接的静态方法

单例类

在kotlin当中要是想要定义一个工具类,会比较推荐单例类进行实现

object Util {
   fun doAction() {
       println("do something")
   }
}

虽然单例类中的doAction()方法并不是静态放啊,但是我们还是可以直接使用Util.doAction()来进行调用

但是单例类的缺点是单例类中的方法都是类似静态方法这种调用方式,但是我们只需要让类中的一个方法变成静态的怎么办?

companion object

在companion object中定义的方法就可以类似于静态方法那样进行调用了

class Util {
   //非静态方法属性
   fun doAction1() {
   }
   //拥有静态方法的属性
   companion object {
       fun doAction2() {
       }
   }
}

注解

单例类和companion object都是在语法形式上模仿了静态方法,实际上不属于真正的静态方法

如果我们给单例类或者companion object中的方法加上@JvmStatic注解,那么kotlin编译器就会将这些方法编译成为真正的静态方法

如下

class Util {
   //非静态方法属性
   fun doAction1() {
   }
   //拥有静态方法的属性
   companion object {
       @JvmStatic
       fun doAction2() {
       }
   }
}

@JvmStatic只能加在单例类或者companion object中的方法

顶层方法

  • 顶层方法指的就是没有定义在任何类中的方法,kotlin编译器会将所有的顶层方法编译成为静态方法

  • 因此只要定义了一个顶层方法,那么他肯定是一个静态方法

来源:https://blog.csdn.net/weixin_45809829/article/details/128019441

标签:Kotlin,标准函数,静态方法
0
投稿

猜你喜欢

  • C#里SuperSocket库不能发现命令的原因

    2023-05-20 20:19:37
  • C#实现简化QQ聊天窗口

    2023-01-18 19:01:20
  • Freemarker如何生成树形导航菜单(递归)

    2023-02-24 13:52:16
  • Java之SpringBoot自定义配置与整合Druid

    2022-09-28 06:23:06
  • 使用Spring Boot进行单元测试详情

    2023-11-10 08:01:53
  • idea创建JAVA Class时自动生成头部文档注释的方法

    2023-07-10 18:53:07
  • Java切割字符串的踩坑实战记录

    2023-02-05 14:13:25
  • 如何用Java Stream写出既高雅又装*的代码

    2022-04-13 23:23:58
  • Andriod arcgis保存Mapview为图片的实例代码

    2022-08-15 01:23:29
  • 关于spring的自定义缓存注解分析

    2023-11-28 17:02:50
  • Elasticsearch写入瓶颈导致skywalking大盘空白

    2021-07-07 00:39:42
  • Kotlin select使用方法介绍

    2022-05-28 19:34:27
  • 使用IDEA将Java/Kotliin工程导出Jar包的正确姿势

    2022-10-18 17:39:34
  • 浅谈基于SpringBoot实现一个简单的权限控制注解

    2022-01-23 16:42:47
  • C#转换日期类型实例

    2023-07-16 21:01:19
  • C#/VB.NET实现创建PDF/UA文件的示例代码

    2023-05-02 23:31:51
  • Spring超详细讲解IOC与解耦合

    2023-06-16 12:32:50
  • 多线程如何解决for循环效率的问题

    2023-12-02 08:31:55
  • Java受检异常的一些思考

    2021-06-08 08:22:16
  • Java编程使用箱式布局管理器示例【基于swing组件】

    2022-08-12 14:09:14
  • asp之家 软件编程 m.aspxhome.com