【Kotlin】静态方法

Kotlin 却极度弱化了静态方法这个概念,非常推荐使用单例类的方式来实现。

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

虽然这里的doAction()方法并不是静态方法,但是我们仍然可以使用Util.doAction()的方式来调用,这就是单例类所带来的便利性。
不过,使用单例类的写法会将整个类中的所有方法全部变成类似于静态方法的调用方式。

如果我们只是希望让类中的某一个方法变成静态方法的调用方式该怎么办呢?这个时候就可以使用刚刚在最佳实践环节用到的companion object了。

class Util {
   
    fun doAction1() {
   
		println("do action1") 
	}
	companion object {
   
	    fun doAction2() {
   
			println("do action2") 
		}
	} 
}

不过,doAction2()方法其实也并不是静态方法,companion object这个关键字实际上会在Util类的内部创建一个伴生类,而doAction2()方法就是定义在这个伴生类里面的实例方法。只是Kotlin 会保证Util类始终只会存在一个伴生类对象,因此,调用Util.doAction2()方法,实际上就是调用了Util类中伴生对象的doAction2()方法。

由此可以看出,Kotlin 确实没有直接定义静态方法的关键字,但是提供了一些语法特性来支持类似于静态方法调用的写法。

如果你确确实实需要定义真正的静态方法,

注解

companion object {
   
	@JvmStatic
	fun doAction2() {
   
		println("do action2")
	}
}

顶层方法

首先,需要创建一个Kotlin 文件。对着任意包名右击 → New → Kotlin File/Class ,在弹出的对话框中输入文件名即可。注意创建类型要选择File。

fun doSomething() {
   
	println("do something") 
}

Kotlin 编译器会将所有的顶层方法全部编译成静态方法。

所有的顶层方法都可以在任何位置被直接调用,不用管包名路径,也不用创建实例,直接键入doSomething()即可。

相关推荐

  1. Kotlin静态方法

    2023-12-12 06:46:06       37 阅读
  2. Kotlin(十二) 定义静态方法

    2023-12-12 06:46:06       37 阅读
  3. Kotlin标准函数和静态方法

    2023-12-12 06:46:06       12 阅读
  4. Kotlin 中的构造方法

    2023-12-12 06:46:06       16 阅读
  5. Python:静态方法

    2023-12-12 06:46:06       19 阅读
  6. 实例方法静态方法

    2023-12-12 06:46:06       6 阅读
  7. Redis Helper封装:静态方法

    2023-12-12 06:46:06       38 阅读
  8. C#中 Combine 静态方法

    2023-12-12 06:46:06       29 阅读
  9. kotlin的抽象类和抽象方法

    2023-12-12 06:46:06       33 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-12 06:46:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-12 06:46:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-12 06:46:06       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-12 06:46:06       20 阅读

热门阅读

  1. Kotlin之for循环的具体使用说明

    2023-12-12 06:46:06       39 阅读
  2. axios的使用

    2023-12-12 06:46:06       37 阅读
  3. PHP和go搭建分布式

    2023-12-12 06:46:06       36 阅读
  4. 06-微服务架构之微服务设计指导书

    2023-12-12 06:46:06       42 阅读
  5. 考研真题C语言

    2023-12-12 06:46:06       37 阅读
  6. Ansible hanlder是啥?Ansible Block是啥?

    2023-12-12 06:46:06       34 阅读
  7. 02.类模板

    2023-12-12 06:46:06       25 阅读
  8. Springboot Redis Lua 分布式限流器

    2023-12-12 06:46:06       47 阅读