Kotlin - 调用Java代码

Kotlin - 调用Java代码 首页 / Kotlin入门教程 / Kotlin - 调用Java代码

Kotlin代码与Java代码完全兼容。现有的Java代码可以很容易地从Kotlin代码中调用,并且Kotlin代码也可以以普通方式从Java代码中调用。

Kotlin调用Java代码

从Kotlin调用其返回类型为void的Java代码时,它将在Kotlin文件中返回Unit。如果有人想返回该值,它将由Kotlin编译器分配给Kotlin文件并返回Unit。例如:

MyKotlinFile.kt

fun main(args: Array<String>) {
  val sum= MyJavaClass.add(5, 10)
  println("printing sum inside Kotlin file: "+sum)
}

MyJavaClass.java

public class MyJavaClass {
    public static void main(String[] args){

    }
    public static void add(inta,int b){
      int result = a + b;
      System.out.println("printing inside Java class :"+result);
    }
}

输出:

printing inside Java class :15
printing sum inside Kotlin file: kotlin.Unit

kotlin调用java int方法

从Kotlin文件中调用int类型或其他(而不是void)的Java代码时,它以相同类型返回结果。例如,从Kotlin文件中调用Java类的area()方法将返回int类型的结果。

无涯教程网

MyKotlinFile.kt

fun main(args: Array<String>) {
  val area: Int = MyJavaClass.area(3, 4)
  println("printing area from java insideKotlin file: "+area)
}

MyJavaClass.java

public class MyJavaClass {
    public static void main(String[] args){

    }
    public static int area(int l, int b){
        int result = l * b;
        return result;
    }
}

输出:

printing area from java insideKotlinfile: 12

Kotlin调用Java类

如果无涯教程要从存在于不同软件包中的Kotlin文件中调用Java代码,则需要使用Kotlin文件中的Java类导入软件包名称。

例如,Java类MyJavaClass.java存在于包myjavapackage中,而Kotlin文件MyKotlinFile.kt存在于mykotlinpackage包中。在这种情况下,从Kotlin文件中调用Java代码需要在Kotlin文件中导入myjavapackage.MyJavaClass。

MyKotlinFile.kt

package mykotlinpackage
import myjavapackage.MyJavaClass

fun main(args: Array<String>) {
  val area: Int = MyJavaClass.area(3, 4)
  println("printing area from java inside Kotlin file: "+area)
}

MyJavaClass.java

package myjavapackage;

public class MyJavaClass {
    public static void main(String[] args){

    }
    public static int area(int l, int b){
        int result = l * b;
        return result;
    }
}

输出:

printing area from java inside Kotlin file: 12

Kotlin访问Java Getter和Setter

由于Kotlin与Java具有完全的互操作性,因此无涯教程可以访问Java类(或POJO类)的getter和setter函数。例如,在Java类MyJava.java中使用属性firstName和lastName创建一个getter和setter方法。可通过Kotlin文件中的MyJava.java的创建对象从Kotlin文件MyKotlin.kt访问这些属性。

MyJava.java

public class MyJava{
    protected String firstName;
    protected String lastName;

    public String getfirstName() {
        return firstName;
    }
    public void setfirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getlastName() {
        return lastName;
    }
    public void setlastName(String lastName) {
        this.lastName = lastName;
    }
}

MyKotlin.kt

fun main(args: Array<String>) {
  val myJava = MyJava()

  myJava.lastName = "Kumar"
  myJava.setfirstName("Arjun")

  println("accessing value using property: "+myJava.firstName)
  println("accessing value using property: "+myJava.lastName)

  println("accessing value using method: "+myJava.getfirstName())
  println("accessing value using method: "+myJava.getlastName())
}

输出:

accessing value using property: Arjun
accessing value using property: Kumar
accessing value using method: Arjun
accessing value using method: Kumar

Kotlin访问Java数组

无涯教程可以简单地调用Java类方法,该方法将数组作为Kotlin文件的参数。例如,创建方法sumValue(),该方法将数组元素作为Java类MyJava.java中的参数来计算加法并返回结果。通过将数组作为参数从Kotlin文件MyKotlin.kt中调用此方法。

MyJava.java

public class MyJava {

    public intsumValues(int[] nums) {
        int result = 0;
        for (int x:nums) {
            result+=x;
        }
        return result;
    }
}

MyKotlin.kt

fun main(args: Array<String>){
val myJava = MyJava()
val numArray = intArrayOf(1, 2, 3,4,5)
val sum = myJava.sumValues(numArray)
println(sum)
}

输出:

sum of array element is 15

Kotlin访问Java Varargs

在Java varags函数中,无涯教程可以将任意数量的参数传递给方法。 Java varargs参数是使用省略号定义的,即数据类型后的三个点(...)。

    从Kotlin访问Java varargs时,无涯教程需要使用传播运算符*传递数组。

    链接:https://www.learnfk.comhttps://www.learnfk.com/kotlin/kotlin-java-interoperability-calling-java-from-kotlin.html

    来源:LearnFk无涯教程网

    让无涯教程看一个示例,其中Java方法使用从Kotlin文件调用的int类型varargs。

    MyJava.java

    public class MyJava {
        public void display(int... values) {
            for (int s : values) {
              System.out.println(s);
            }
        }
    }

    MyKotlin.kt

    fun main(args: Array<String>){
      val myJava = MyJava()
      val array = intArrayOf(0, 1, 2, 3)
      myJava.display(*array)
    }

    输出:

    0
    1
    2
    3
    

    让无涯教程看另一个示例,该示例在Java方法中使用两个参数,这些参数用作String类型和从Kotlin文件调用的int类型varargs的参数。

    MyJava.java

    public class MyJava {
        public void display(String message,int... values) {
            System.out.println("string is " + message);
            for (int s : values) {
              System.out.println(s);
            }
        }
    }

    MyKotlin.kt

    fun main(args: Array<String>){
      val myJava = MyJava()
      val array = intArrayOf(0, 1, 2, 3)
      myJava.display("hello",*array)
    }

    输出:

    string is hello
    0
    1
    2
    3
    

    Kotlin和Java类型映射

    Kotlin和Java类型的映射方式不同,但是它们映射至相应的类型。这些类型的映射仅在编译时才重要,并且运行时保持不变。

    Java的原始类型到对应的Kotlin类型

    Java typeKotlin type
    bytekotlin.Byte
    shortkotlin.Short
    intkotlin.Int
    longkotlin.Long
    charkotlin.Char
    doublekotlin.Double
    booleankotlin.Boolean

    Java的非基本类型与对应的Kotlin类型

    Java typeKotlin type
    java.lang.Objectkotlin.Any!
    java.lang.Cloneablekotlin.Cloneable!
    java.lang.Comparablekotlin.Comparable!
    java.lang.Enumkotlin.Enum!
    java.lang.Annotationkotlin.Annotation!
    java.lang.Deprecatedkotlin.Deprecated!
    java.lang.CharSequencekotlin.CharSequence!
    java.lang.Stringkotlin.String!
    java.lang.Numberkotlin.Number!
    java.lang.Throwablekotlin.Throwable!

    Java的boxed基本类型与对应的nullableKotlin类型

    Java typeKotlin type
    java.lang.Bytekotlin.Byte?
    java.lang.Shortkotlin.Short?
    java.lang.Integerkotlin.Int?
    java.lang.Longkotlin.Long?
    java.lang.Characterkotlin.Char?
    java.lang.Floatkotlin.Float?
    java.lang.Doublekotlin.Double?
    java.lang.Booleankotlin.Boolean?

    Java的集合类型为对应的只读或可变Kotlin类型

    Java typeKotlin read-only typeKotlin mutable type
    Iterator<T>Iterator<T>MutableIterator<T>
    Iterable<T>Iterable<T>MutableIterable<T>
    Collection<T>Collection<T>MutableCollection<T>
    Set<T>MutableSet<T>MutableSet<T>
    List<T>MutableList<T>MutableList<T>
    ListIterator<T>ListIterator<T>MutableListIterator<T>
    Map<K, V>Map<K, V>MutableMap<K, V>
    Map.Entry<K, V>Map.Entry<K, V>MutableMap.MutableEntry<K, V>

    祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

    技术教程推荐

    深入浅出gRPC -〔李林锋〕

    软件工程之美 -〔宝玉〕

    iOS开发高手课 -〔戴铭〕

    OpenResty从入门到实战 -〔温铭〕

    分布式金融架构课 -〔任杰〕

    程序员的测试课 -〔郑晔〕

    玩转Vue 3全家桶 -〔大圣〕

    大厂广告产品心法 -〔郭谊〕

    自动化测试高手课 -〔柳胜〕

    好记忆不如烂笔头。留下您的足迹吧 :)