Android-Kotlin-3 Java呼叫Kotlin程式


Posted by John on 2020-12-06

當Java要呼叫Kotlin,基本上都是搭配著@JvmStatic與@JvmField,使用方法其實不難,他們都存在一些邏輯,以下就是針對比較常見的幾種方式來介紹
第一種:@JvmStatic,當使用這個時,Java端有get和set的方法

//此處是Kotlin端
class MainActivity {
    companion object {
        @JvmStatic
        var DATA = ""
    }
}
//此處是Java端
public class TextJava {
    void testData() {
        MainActivity.getDATA();
        MainActivity.setDATA("123");
    }
}

第二種:@JvmField,當使用這個時,Java端刪除了get和set方法,如下

//此處是Kotlin端
class MainActivity {
    companion object {
        @JvmField
        var DATA = ""
    }
}
//此處是Java端
public class TextJava {
    void testData() {
        MainActivity.DATA = "";
        String tempString = MainActivity.DATA;
        Log.i("tag","data: "+tempString);
    }
}

第三種:const val,這個與@JvmField val一樣,但在companion object內部時,Android Studio會跳出黃線,建議修改成const val,在Java端只有讀的方法
在companion object內部,使用@JvmField val建議修改const val的圖示

//此處是Kotlin端
class MainActivity {
    companion object {
        const val DATA = ""
    }
}
//此處是Java端
public class TextJava {
    void testData() {
        String tempString = MainActivity.DATA;
        Log.i("tag","data: "+tempString);
    }
}

第四種:不在companion object內部,直接在class內部使用@JvmField,此時因為不是靜態變數了,所以需要這樣使用
因為此時不在companion objects內部,所以不是靜態變數,因此也不能這樣使用

//此處是Kotlin端
class MainActivity {
    @JvmField val data1 = ""
}
//此處是Java端
public class TextJava {
    void testData() {
        //此處因為不在companion object內部,不是靜態變數
        MainActivity mainActivity = new MainActivity();
        String tempString = mainActivity.data1;
        Log.i("tag","data: "+tempString);
    }
}

第五種:呼叫靜態變數內的Function,使用@JvmStatic

//此處是Kotlin端
class MainActivity {
    companion object {
        @JvmStatic fun runPrint() {
            Log.i("tag2","print AAA")
        }
    }
}
//此處是Java端
public class TextJava {
    void testData() {
        MainActivity.runPrint();
    }
}

因為@JvmField不存在get與set的方法,因此無法在fun使用它大致上就以上幾種方式哩,如果不熟其實也沒關係,多碰幾次後,自然就清楚囉,另外Android Studio真的很好用,提示功能也很強,發現錯了,也會有提示讓你知道


#Android #Kotlin #程式設計 #電腦程式 #java







Related Posts

Day03 運籌帷幄

Day03 運籌帷幄

[Day-2]從電商網站學導覽列表

[Day-2]從電商網站學導覽列表

Check If All 1's Are at Least Length K Places Away

Check If All 1's Are at Least Length K Places Away


Comments