Kotlin教程:调用Java代码

2020-04-2410:32:16编程语言入门到精通Comments2,296 views字数 5405阅读模式

Kotlin代码与Java代码完全兼容。 Java代码在Kotlin代码中轻松调用,Kotlin代码也可以通过Java代码的正常方式调用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

从Kotlin调用Java代码

从Kotlin文件调用Java void方法

从Kotlin调用返回类型为void的java代码时,它在Kotlin文件中返回Unit。 如果想要返回一个值,它将由Kotlin编译器分配给Kotlin文件并返回Unit。 例如:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

代码文件:MyKotlinFile.kt文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

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

代码文件:MyJavaClass.java文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

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

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

运行代码:MyKotlinFile.kt ,得到以下结果 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

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

从Kotlin文件调用Java int方法

在从Kotlin文件调用int类型或其他(而不是void)的java代码时,它返回相同类型的结果。 例如,从Kotlin文件调用Java类的area()方法会返回int类型的结果。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

代码文件:MyKotlinFile.kt文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

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

代码文件:MyJavaClass.java文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

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

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

运行代码:MyKotlinFile.kt ,得到以下结果 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

printing area from java insideKotlin file: 12
Shell

Kotlin调用包内的Java类

如果想要从Kotlin文件调用存在于不同包中的Java代码,则需要在Kotlin文件中使用Java类导入包名。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

例如,一个Java类MyJavaClass.java存在于一个包myjavapackage中,一个Kotlin文件MyKotlinFile.kt存在于mykotlinpackage包中。 在这种情况下,从Kotlin文件调用Java代码需要在Kotlin文件中导入myjavapackage.MyJavaClass包。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

代码文件:MyKotlinFile.kt文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

package mykotlinpackage

import myjavapackage.MyJavaClass

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

代码文件:MyJavaClass.java文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

package myjavapackage;

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

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

运行代码:MyKotlinFile.kt ,得到以下结果 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

printing area from java insideKotlin file: 18
Shell

Kotlin代码访问Java getter和setter

由于Kotlin与Java完全互操作,在Kotlin可以访问Java类(或POJO类)的gettersetter方法。例如,在Java类MyJava.java中创建一个gettersetter方法,用于设置和读取firstNamelastName属性。 从Kotlin文件通过使用MyJava.java类来创建对象,在MyKotlin.kt访问这些属性。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

文件:MyJava.java -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

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;
    }
}
Java

文件:MyKotlin.kt -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

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

    myJava.lastName = "Max"
    myJava.setfirstName("Su")

    println("使用属性访问值: "+myJava.firstName)
    println("使用属性访问值: "+myJava.lastName)
    println("------------------------------------")
    println("使用方法访问值: "+myJava.getfirstName())
    println("使用方法访问值: "+myJava.getlastName())
}
Kotlin

运行代码:MyKotlin.kt ,得到以下结果 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

使用属性访问值: Su
使用属性访问值: Max
------------------------------------
使用方法访问值: Su
使用方法访问值: Max
Shell

Kotlin代码访问Java数组

可以简单地调用Java类方法,该方法将数组作为Kotlin文件中的参数。 例如,创建方法sumValue(),它将数组元素作为Java类MyJava.java中的参数计算加法并返回结果。 通过将数组作为参数传递,从Kotlin文件MyKotlin.kt调用此方法。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

文件:MyJava.java -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

public class MyJava {

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

文件:MyKotlin.kt -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

fun main(args: Array<String>){
    val myJava = MyJava()
    val numArray = intArrayOf(1, 2, 3,4,5)
    val sum = myJava.sumValues(numArray)
    println("数组元素总和:"+sum)
}
Kotlin

运行代码:MyKotlin.kt ,得到以下结果 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

数组元素总和:15
Shell

Kotlin代码访问Java可变参数

在Java可变参数函数中,可以将任意数量的参数传递给方法。 Java可变参数使用省略号定义,即数据类型后的三个点(...)。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

使用可变参数(varargs)时,应注意以下几点:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

  • 方法中只有一个可变参数(varargs)。
  • 可变参数(varargs)必须是最后一个参数。

在从Kotlin访问Java可变参数(varargs)时,需要使用运算符*来传递数组。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

下面来看看一个从Kotlin文件调用Java方法使用int类型可变参数(varargs)的示例。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

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

文件:MyKotlin.kt -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

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

运行代码:MyKotlin.kt ,得到以下结果 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

0
1
2
3
Shell

让我们来看另一个例子,它在Java方法中使用两个参数作为String类型的参数,并从Kotlin文件调用的int类型可变参数(varargs)。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

文件:MyJava.java -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

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

文件:MyKotlin.kt -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

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

运行代码:MyKotlin.kt ,得到以下结果 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

string is hello
0
1
2
3
Shell

Kotlin和Java映射类型

Kotlin和Java类型的映射方式不同,但它们都能映射到相应的类型。 这些类型的映射仅在编译时才有意义,运行时保持不变。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

Java的原始类型对应的Kotlin类型文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

Java类型Kotlin类型
bytekotlin.Byte
shortkotlin.Short
intkotlin.Int
longkotlin.Long
charkotlin.Char
doublekotlin.Double
booleankotlin.Boolean

Java非原始类型对应的Kotlin类型文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

Java类型Kotlin类型
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盒装原始类型和相应的可空Kotlin类型文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

Java类型Kotlin类型
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类型文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

Java类型Kotlin只读类型Kotlin可变类型
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>

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

//原文出自【易百教程】,商业转载请联系作者获得授权,非商业转载请保留原文链接:https://www.yiibai.com/kotlin/kotlin-java-interoperability-calling-java-from-kotlin.html#article-start文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18324.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ymba/18324.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定