天天看點

Kotlin-2-與Java之間的互調Kotlin與Java之間的互調

目錄

Kotlin與Java之間的互調

1、文法變化

1.1、kotlin的函數是可以寫在類的外面的

1.2、java函數調用kotlin函數

1.3、kotlin匿名内部類的寫法

1.4、對class的調用

2、Kotlin關鍵字處理

2.1、Kotlin中沒有封裝類

2.2、Kotlin類型null值敏感

2.3、Kotlin沒有靜态變量與靜态方法

Kotlin與Java之間的互調

1、文法變化

1.1、kotlin的函數是可以寫在類的外面的

fun outside(who:String) {
       //我在類的外面,MainActivity.kt檔案的裡面
       println("我是$who")
   }
class MainActivity : AppCompatActivity() {
    private fun inside() {
        //我在類的裡面,
        outside("張三")
    }
}
           

1.2、java函數調用kotlin函數

如下圖java函數如果想要調用kotlin中的函數就需要用kotlin 檔案名+Kt 的形式來調用内部的函數。
Kotlin-2-與Java之間的互調Kotlin與Java之間的互調

1.3、kotlin匿名内部類的寫法

檔案目錄
Kotlin-2-與Java之間的互調Kotlin與Java之間的互調
//K_Basis.kt檔案中的内部類 
 object InsideClass1{
    fun sayMessage1(msg:String){
        print(msg)
    }
}
//MainActivity.kt檔案中的内部類
class MainActivity : AppCompatActivity() {

    object InsideClass {
        fun sayHello(msg: String) {
            print(msg)
        }
    }
}
 //J_Basis.java中調用kotlin内部類的方法
public class J_Basis {
    /*
     * kotlin中的匿名内部類在編譯過程中會生成一個INSTANCE的單例對象,
     * 并把自己的構造函數聲明為private
     * (這也是kotlin中單例模式的書寫方式)
     */
    public static void main(String[] args) {
        MainActivityKt.outside("張三");
        MainActivity.InsideClass.INSTANCE.sayHello("hello");
        InsideClass1.INSTANCE.sayHello1("hello1");
    }
}
           

1.4、對class的調用

/**

  * 1、當調用java的class的時候需要在後面加java标簽

  * 2、kotlin調用kotlin類則不需要

  */

fun main() {
    testClass(J_Basis::class.java)
    testClass1(MainActivity::class)
}

fun testClass(javaClass:Class<J_Basis>){
}

fun testClass1(kotlinClass:KClass<MainActivity>){

}
           

2、Kotlin關鍵字處理

2.1、Kotlin中沒有封裝類

       就比如int的封裝類Integer在kotlin中是沒有,如下圖testInteger()函數的參數Integer類型,但在kotlin中識别出來的類型是Int!這是一種相容類型,kotlin自動将Integer類型轉換成了自己能運作的相容類型。

       那麼怎麼實作封裝類呢?可以使用反射來實作封裝類。

public class TestInteger {

    public static void testInteger(Integer integer) {
        System.out.print("integer=" + integer);
    }
    public static void testInteger1(int integer) {
        System.out.print("integer=" + integer);
    }
}
           
Kotlin-2-與Java之間的互調Kotlin與Java之間的互調

2.2、Kotlin類型null值敏感

Kotlin-2-與Java之間的互調Kotlin與Java之間的互調

2.3、Kotlin沒有靜态變量與靜态方法

object InsideClass {

    @JvmStatic
    var name: String = "Zhang San"

    @JvmStatic
    fun writeName(name: String) {
        println("我的名字叫$name")
    }

    fun writeName1(name1: String) {
        println("我的名字叫$name1")
    }
}