KotlinでのJavaのような静的メソッド

2365 ワード

独学で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パッケージが行われるからです.