Kotlin中类似Java的静态方法

刚开始自学Kotlin,因为和Java很像,基础部分还是比较容易理解的,但是Kotlin有自己的特性。
在Kotlin里面我们发现没有静态变量和方法的说法,习惯了Java中使用静态方法还真有点不适应。
开始在网上查找资料时大多会说使用伴生对象的方法来模拟静态。后来在官方文档中发现其实这种方式不是最好的实现方法。

那首先看下在Java中静态方法和静态变量的使用方式:

public class StaticDemo {
    
    public static int number = 1;
    
    public static int getId(){
        return 2;
    }
}

使用也很简单

    public static void main(String[] args){

        int number = StaticDemo.number;
        
        int id = StaticDemo.getId();
    }

那Kotlin中的写法呢?
我们使用伴生对象的方式看下:

class KtStatic {

    var number1 = 10

    fun getId1():Int{
        return 11
    }

     //伴生对象
    companion object{
        var number2 = 20

        fun getId2():Int{
            return 21
        }
    }


}

在看下在Kotlin中使用和Java中使用有什么不同

//Kotlin中
fun main(args: Array) {

//    不可直接访问number1
//    var number1 =KtStatic.number1

//    同样不能直接访问getId1
//    var id1 = KtStatic.getId1()

//    使用下面方式看起来和在Java中使用的是一样的
    var number2 = KtStatic.number2

    var id2 = KtStatic.getId2()

}

Java中使用有了变化

    public static void main(String[] args) {

//        不可访问,好理解
//        int number1 = KtStatic.number1;
        
//        也不可访问,
//        int number2 = KtStatic.number2;
        
//        正确访问方式,意外吧,呵呵
        int number = KtStatic.Companion.getNumber2();
        int id = KtStatic.Companion.getId2();

    }

这种方法实际Companion相当于内部类
那么下面来说另一种写法:

package com.yiifox.demo

var number = 1

fun getId():Int{
    return 2
}
//方便知道我写的文件名
class Kt2Static

Kotlin中使用

package com.yiifox.demo.test

import com.yiifox.demo.KtStatic
import com.yiifox.demo.getId
import com.yiifox.demo.number

fun main(args: Array) {
    //    使用很简单,但是要注意导包
    var number2 = number
    
    var id = getId()
}

那么在Java中呢?

    public static void main(String[] args) {

//        注意,原来写的类名是Kt2Static,使用时却多了个尾巴Kt
        int number = Kt2StaticKt.getNumber();

        int id = Kt2StaticKt.getId();

    }

这种就是比较符合我们的使用了。

关于在Kotlin中明明定义的是
var number = 1
Java中却使用的是getNumber();是因为Kotlin在转化为Java时会自动进行get、set包装。

你可能感兴趣的:(Kotlin中类似Java的静态方法)