文章目录
- [0. 前言](#0. 前言)
- [1. 单例类](#1. 单例类)
- [2. 伴生类](#2. 伴生类)
- [3. 注解实现真正静态](#3. 注解实现真正静态)
- [4. 顶层方法](#4. 顶层方法)
- [5. 总结](#5. 总结)
0. 前言
在java中声明静态函数,仅需要在函数声明的时候加上static关键字即可,这样的话就可以通过类名直接调用对应函数而不用先创建实例。
但是在kotlin中有所不同,kotlin并没有static修饰这个概念。
如果想要实现类似java那样的功能,有以下几种方法。
1. 单例类
创建一个单例类,在类中定义的函数都可以直接通过类名调用,值得注意的是,单例类只会有一个实例。
kotlin
object ToolClass{
fun add(num1: Int, num2 Int){
return num1 + num2
}
}
使用:
val sum = ToolClass.add(1,2)
注意,单例类中所有的函数都是可以直接通过类名直接调用的,无一例外。
如果只是想调用某个类的某个函数呢?这并不值得再多创建一个类。
可以通过 companion object{} 来修饰。
2. 伴生类
companion object{}会在类内部创建一个伴生类,而kotlin的特性是一个类中最多只能有一个伴生类,这个伴生类中的方法可以直接通过外部类名来进行调用。伴生类外部的方法不受影响。
kotlin
class Util{
fun add1(){
println("add1")
}
companion object{
fun add2(){
println("add2")
}
}
}
使用的时候直接用:
Util.add2()
即可。
在我上一篇文章第三章中,用来启动另一个Activity的方法就是用了伴生类的方式实现的。
链接:
3. 注解实现真正静态
虽然kotlin没有像java那样直接修饰函数的关键字,但是它仍提供了实现方式,注解便是其中一种。
kotlin
class Util{
fun add1(){
println("add1")
}
companion object{
@JvmStatic
fun add2(){
println("add2")
}
}
}
使用@JvmStatic注解以后,这个函数便变成了真正意义上的静态函数。
但是注意,这个注解只能加在单例类或者伴生类中的方法中,因此加不加意义不大,调用方式还是和之前一样:
Util.add2()
4. 顶层方法
顶层方法指的是不在任何类中的方法,kotlin会将所有的顶层方法全部编译成静态方法,这里的静态方法指的是真正意义上面的静态方法。
想要创建顶层方法,那么创建文件的时候就不能选择类文件kotlin Class了,而要创建kotlin File,这样的话在kotlin File定义的任何方法都是静态方法。
kotlin
//Test.kt
fun tools(){
println("tools")
}
在项目的任何地方都可以被直接调用,不用import也不用像java那样使用Test.tools()的形式,直接用这样的形式就行:
tools()
5. 总结
一般来说,如果功能函数是一系列的,那就使用单例类来写,方便后面的归档与管理。
如果只是偶有需求并且与某个Activity有所绑定,那就直接在对应的Activity文件中使用companion objec{}来修饰。