关于kotlin的“类”静态函数

文章目录

  • [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{}来修饰。