<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ### 在Java中調用Kotlin #### 調用Kotlin中的包級函數 在Kotlin的包中直接聲明的函數被稱為包級函數,這些函數在編譯時最終會生成一個靜態的函數,在Java中調用該函數有兩種形式,具體如下。 * 在編譯時,包級函數會生成一個靜態函數,包級函數所在的文件會生成一個名為“文件名Kt”的類,因此調用包級函數通過“文件名Kt.函數名()”的形式即可。 * 如果想要編譯包級函數的類名(改成與Java類名類似),則需要在Kotlin文件中上方添加@file:JvmName("類名")注解。括號中的類名可以自己定義。 接下來我們通過一個案例來演示如何在Java中調用Kotlin中的包級函數。 1. 創建PacketFunction.kt 創建一個PackageFunction.kt文件,在該文件中創建一個包級函數add(),具體代碼如【文件12-9】所示。 【文件12-9】PackageFunction.kt ``` @file:JvmName("Function") fun add(a: Int, b: Int): Int = a + b //包級函數(頂層函數) ``` 在上述代碼中,第1行代碼中的注解表示將該文件的類名設置為Function,同時在該文件中創建了一個包級函數add(),該函數返回兩個參數的和。 >[info] **注意** 帶有@file:JvmName("類名")注解的kotlin文件不能放到包目錄中,否則會出現this annotation is not applicable to target 'top level function' and use site target"@file"的錯誤信息。 2. 創建PacketFunction.java 在PackageFunction.kt文件的同級目錄中創建一個PacketFunction.java文件,在該文件中調用【文件12-9】中的包級函數add(),具體代碼如【文件12-10】所示。 【文件12-10】PacketFunction.java ``` public class PacketFunction { public static void main(String[] args) { //PackageFunction.kt 文件未添加注解時,調用add()函數 //int result = PackageFunctionKt.add(10, 20); //PackageFunction.kt 文件添加注解時,調用add()函數 int result = Function.add(10, 20); System.out.println(result); } } ``` 運行結果: ``` 30 ``` 如果【文件12-9】中不添加@file:JvmName("Function")注解,則PacketFunction.kt文件在編譯時會生成一個PackageFunctionKt類,該文件中的包級函數add()在編譯時會生成一個靜態函數add(),因此在Java中可以通過上述第4行代碼的方式來調用add()函數。如果【文件12-9】中添加@file:JvmName("Function")注解,則需要通過上述第6行代碼來調用add()函數。 >[info] **注意** 在Java中不能通過new關鍵字來創建Kotlin中編譯后生成的PackageFunctionKt類的對象。 #### 調用Kotlin中的實例字段 在Kotlin中,調用某個類的字段時,都需要通過點的方式來調用。對于Java來說,則需要通過getXX()方法和setXX()方法來獲取與設置字段的值,這是因為在Kotlin類中的字段編譯時最終會生成Java代碼中的getXX()方法和setXX()方法。如果想要Kotlin類中的字段編譯后生成的字段不用private關鍵字來修飾而是通過public關鍵字來修飾,則需要在Kotlin類中的該字段上方添加@JvmField注解,此時在Java代碼中可以通過點的方式來訪問Kotlin中類的字段。接下來我們通過一個案例來演示一下在Java代碼中調用Kotlin中的字段。 1. 創建Field.kt 創建一個Field.kt文件,在該文件中創建一個Person類,并在該類中創建兩個字段,分別是name和age。具體代碼如【文件12-11】所示。 【文件12-11】Field.kt ``` class People { @JvmField var name = "張三" var age = 20 } ``` 上述代碼中,給name字段添加了@JvmField注解,這個注解主要可以使name字段在Java中以點的方式進行訪問。 2. 創建Field.java 創建名為Field的Java文件,在該類中的main()函數中來調用【文件12-11】中的字段。具體代碼如【文件12-12】所示。 【文件12-12】Field.java ``` public class Field { public static void main(String[] args) { People people = new People(); people.name = "李四"; people.setAge(10); System.out.println("姓名:"+people.name); System.out.println("年齡:"+people.getAge()); } } ``` 運行結果: ``` 姓名:李四 年齡:10 ``` 從上述代碼可以看出,第5行代碼是通過person.name的形式訪問Kotlin中字段的,而訪問age字段時,必須要通過setAge()與getAge()的方式。 #### 調用Kotlin中的靜態字段和方法 在Java中,靜態方法和字段可以通過static關鍵字來修飾,調用時直接通過“類名.成員名”的方式進行訪問。在Kotlin中沒有static關鍵字,只能通過伴生對象的方式將字段或者方法設置為靜態的。如果想要將Kotlin對象中的一些屬性和方法設置為靜態的,則可以將它放入伴生對象中,在Java中調用時可以通過“類型.成員”或者“類名.伴生對象.成員”的方式進行訪問。接下來我們通過一個案例來演示如何在Kotlin中調用靜態字段和方法,并在Java中通過一定的方式進行調用這些字段和方法。 1. 創建Static.kt 創建一個Static.kt文件,在該文件中創建一個Department類并在這個類中創建一個名為Fruit的伴生對象,在該伴生對象中創建一個靜態字段name。具體代碼如【文件12-13】所示。 【文件12-13】Static.kt ``` class Department { companion object Fruit { var name = "Apple" //靜態的 @JvmStatic fun sayHello() { println(name) } } } ``` 上述代碼中,在伴生對象Fruit中創建了一個靜態字段name,同時也通過@JvmStatic注解創建了一個靜態方法sayHello()。在Kotlin中,可以將命名對象(Object對象)或伴生對象中定義的方法通過@JvmStatic注解生成一個靜態方法。 2. 創建Static.java 創建一個Static.java文件,在該文件中調用【文件12-13】中的靜態字段和方法。具體代碼如【文件12-14】所示。 【文件12-14】Static.java ``` public class Static { public static void main(String[] args) { Department.Fruit.setName("Pea"); //設置Kotlin中的靜態字段 Department.Fruit.getName(); //獲取Kotlin中的靜態字段 Department.Fruit.sayHello(); //調用Kotlin中的靜態函數 Department.sayHello(); //調用Kotlin中的靜態函數 } } ``` 運行結果: ``` Pea Pea ``` 從上述代碼可以看出,在Java中可以通過“類名.伴生對象名.getXX()/setXX()”的方式來訪問Kotlin中的靜態字段,通過“類名.伴生對象.靜態方法”或“類名.靜態方法”的方式來訪問Kotlin中的靜態方法。 #### 調用Kotlin中的集合類 Kotlin中List和MutableList是映射到Java中的List,同樣Map和Set也是一樣的,需要注意的是Kotlin中通過listof()方法創建的集合是不能添加和刪除元素的。接下來我們通過一個案例來演示在Java中調用Kotlin中創建的一個List集合并修改集合中的元素。 1. 創建List.kt 創建一個List.kt文件,在該文件中創建一個getList()方法,該方法的返回值是一個集合,這個集合是通過listof()方法創建的。具體代碼如【文件12-15】所示。 【文件12-15】List.kt ``` fun getList():List<String>{ return listOf("張三","李四","王五") } ``` 2. 創建ModifyList.java 創建一個ModifyList.java文件,在該文件中的main()方法中通過調用Kotlin中創建的getList()方法來獲取List集合并修改集合中的元素。具體代碼如【文件12-16】所示。 【文件12-16】ModifyList.java ``` import java.util.List; public class ModifyList { public static void main(String[] args) { List<String> list = ListKt.getList();//映射到Java的List list.set(2, "周七"); //修改集合中索引為2的元素值為周七 for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } } } ``` 運行結果: ``` 張三 李四 周七 ``` 在上述代碼中,通過set()方法將list集合中的索引為2的元素修改為周七,從運行結果可以看出已經修改成功。 需要注意的是,Java中可以通過add()方法向集合中添加或修改元素,但這里不能這樣寫,否則在運行時會報錯。 #### 顯式申明Kotlin中的異常 在Kotlin中拋出一個異常,在Java中調用該異常所在的方法時,編譯器不會提示有異常需要處理。如果想要在Java編譯器中提示有異常,則需要在Kotlin中拋出異常的方法上方添加一個@Throws(Exception::class)注解。接下來我們通過一個案例來演示顯示申明Kotlin中的異常。 1. 創建Exception.kt 創建一個Exception.kt文件,在該文件中創建一個Calculation類,在該類中定義一個divide()方法實現兩個數的除法運算。具體代碼如【文件12-17】0所示。 【文件12-17】Calculation.kt ``` class Calculation { // 提示處理Kotlin 異常 @Throws(Exception::class) fun divide(a: Int, b: Int) { if (b == 0) { throw Exception(" 出現了異常") } val result = a / b println(result) } } ``` 上述代碼中,當divide()方法中傳遞的參數b為0時,程序會拋出一個異常,同時在該方法的上方添加了@Throws(Exception::class)注解,添加這個注解是為了在Java中調用這個方法時編譯器會提示有異常。 2. 創建ExceptionDemo.java 創建一個Exception.java文件,在該文件中調用【文件12-17】中的divide()方法,具體代碼如【文件12-18】所示。 【文件12-18】Exception.java ``` public class Exception extends Throwable { public static void main(String[] args) { Calculation calc = new Calculation(); try { calc.divide(10, 0); } catch (Exception e) { e.printStackTrace(); } } } ``` 運行結果: ``` Exception in thread"main"java.lang.Exception:出現了異常 at com.itheima.chapter12.Calculation.divide(Exception.kt:7) at com.itheima.chapter12.Exception.main(Exception.java:6) ``` 在上述代碼中,調用divide()方法時,由于編譯器提示此處需要處理一個異常,因此添加了try…catch語句。如果【文件12-17】中的divide()方法上方不添加@Throws(Exception::class)注解,此時調用divide()方法,編譯器不會提示這個異常,但是在程序運行時會拋出這個異常。 #### 關鍵字沖突的互操作 一些Kotlin關鍵字在Java中是最優先的標識符,例如in、Object、is等。如果在Java中使用了Kotlin中的關鍵字作為一個方法的名稱,則可以通過反引號字符轉義來調用。接下來我們通過一個案例來演示在Kotlin中如何處理關鍵字沖突的互操作。 1. 創建Keyword.java 創建一個Keyword.java文件,在該文件中創建一個is()方法。具體代碼如【文件12-19】所示。 【文件12-19】Keyword.java ``` public class Keyword { public boolean is(Object o) { return true; } } ``` 2. 創建Keyword.kt 創建一個Keyword.kt文件,在該文件中調用Java中創建的is()方法。具體代碼如【文件12-20】所示。 【文件12-20】Keyword.kt ``` fun main(args: Array<String>) { var key = Keyword() var result = key.`is`("Hello") //通過反引號調用is()方法 println(result) } ``` 運行結果: ``` true ``` 在上述代碼中,由于在Kotlin中is是關鍵字,如果想要調用is()方法,則需要通過反引號來實現。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看