📜  Kotlin 中Java静态方法的等价物

📅  最后修改于: 2022-05-13 01:55:30.465000             🧑  作者: Mango

Kotlin 中Java静态方法的等价物

先决条件: Java中的静态关键字

Java中的静态关键字是非访问修饰符。它对于表示元数据(通常与类相关的数据)很有用。 static 关键字用于有效的内存管理,因为尽管Java虚拟机反复使用,但它只会为声明为静态的变量、方法、类或块分配内存一次。静态成员与正在创建的实例无关,而是归类本身所有。然而,在 Kotlin 中,我们没有这样的关键字。所以这个功能必须使用其他一些方式来实现。下面列出了与 static 关键字类似的最流行的实现功能的方法:

通过使用伴随对象

Kotlin 中的对象表达式或对象声明用于创建匿名类的实例。将伴随标识符与此类对象表达式或声明一起使用有助于仅通过使用类名作为限定符来调用伴随对象的成员。当匹配的类被加载(解析)时,会创建一个与Java静态初始化器具有相同语义的伴生对象。

Kotlin
class GFG {
      companion object{
          fun getMetaData() : String {
            return "Static Method of Class"
        }
      }
}  
  
fun main(args: Array) {
      // Calling method of companion object  
      println(GFG.getMetaData())
}


Kotlin
object MyClass{
   @JvmStatic
   fun getMetaData(): String {
      return "Static Method of the Class"
   }
}
  
fun main(args: Array) {
    println(GFG.getMetaData())
}


Kotlin
package com.gfg.sample
fun getMetaData() : String {
    return "Static Method of Package"
}


Kotlin
import com.gfg.sample
  
fun main(args: Array) {
    println(getMetaData())
}


输出:

Static Method of Class

在Java的情况下,可以调用伴随对象的方法,但我们需要在类名之后的函数调用之前添加一个额外的“Companion”字段。我们也可以通过将我们自己的名称赋予伴生对象或使用 @JvmStatic 注释来摆脱这种情况。

通过使用@JvmStatic 注解

在要声明为与Java中的静态成员等效的成员之前添加 @JvmStatic 注释在 Kotlin 中可以很好地提供相同的功能。

科特林

object MyClass{
   @JvmStatic
   fun getMetaData(): String {
      return "Static Method of the Class"
   }
}
  
fun main(args: Array) {
    println(GFG.getMetaData())
}

输出:

Static Method of Class

通过使用包级函数

与Java中的静态成员和方法等效的功能也可以通过使该成员、方法、类或块成为包级成员来实现。这可以通过创建一个 .kt 文件并将所有需要的成员放入其中来完成,而无需在其中创建任何类。这样,所有这些成员都将被 JVM 编译为 Kotlin 类的静态部分,在该类中导入包。

Kotlin 文件实现静态关键字的功能:

科特林

package com.gfg.sample
fun getMetaData() : String {
    return "Static Method of Package"
}

主要 Kotlin 文件:

科特林

import com.gfg.sample
  
fun main(args: Array) {
    println(getMetaData())
}

输出:

Static Method of Package