Kotlin代码与Java代码完全兼容。 Java代码在Kotlin代码中轻松调用,Kotlin代码也可以通过Java代码的正常方式调用。

从Kotlin调用Java代码

从Kotlin文件调用Java void方法

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

代码文件:MyKotlinFile.kt

fun main(args: Array) {

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(int a,int b){

int result = a + b;

System.out.println("printing inside Java class :"+result);

}

}

运行代码:MyKotlinFile.kt ,得到以下结果 -

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) {

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 a, int b){

int result = a * b;

return result;

}

}

运行代码:MyKotlinFile.kt ,得到以下结果 -

printing area from java insideKotlin file: 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) {

val area: Int = MyJavaClass.area(3, 6)

println("printing area from java insideKotlin file: "+area)

}

代码文件:MyJavaClass.java

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;

}

}

运行代码:MyKotlinFile.kt ,得到以下结果 -

printing area from java insideKotlin file: 18

Kotlin代码访问Java getter和setter

由于Kotlin与Java完全互操作,在Kotlin可以访问Java类(或POJO类)的getter和setter方法。例如,在Java类MyJava.java中创建一个getter和setter方法,用于设置和读取firstName和lastName属性。 从Kotlin文件通过使用MyJava.java类来创建对象,在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) {

val myJava = MyJava()

myJava.lastName = "Max"

myJava.setfirstName("Su")

println("使用属性访问值: "+myJava.firstName)

println("使用属性访问值: "+myJava.lastName)

println("------------------------------------")

println("使用方法访问值: "+myJava.getfirstName())

println("使用方法访问值: "+myJava.getlastName())

}

运行代码:MyKotlin.kt ,得到以下结果 -

使用属性访问值: Su

使用属性访问值: Max

------------------------------------

使用方法访问值: Su

使用方法访问值: Max

Kotlin代码访问Java数组

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

文件:MyJava.java -

public class MyJava {

public int sumValues(int[] nums) {

int result = 0;

for (int x:nums) {

result+=x;

}

return result;

}

}

文件:MyKotlin.kt -

fun main(args: Array){

val myJava = MyJava()

val numArray = intArrayOf(1, 2, 3,4,5)

val sum = myJava.sumValues(numArray)

println("数组元素总和:"+sum)

}

运行代码:MyKotlin.kt ,得到以下结果 -

数组元素总和:15

Kotlin代码访问Java可变参数

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

使用可变参数(varargs)时,应注意以下几点:

方法中只有一个可变参数(varargs)。

可变参数(varargs)必须是最后一个参数。

在从Kotlin访问Java可变参数(varargs)时,需要使用运算符*来传递数组。

下面来看看一个从Kotlin文件调用Java方法使用int类型可变参数(varargs)的示例。

public class MyJava {

public void display(int... values) {

for (int s : values) {

System.out.println(s);

}

}

}

文件:MyKotlin.kt -

fun main(args: Array){

val myJava = MyJava()

val array = intArrayOf(0, 1, 2, 3)

myJava.display(*array)

}

运行代码:MyKotlin.kt ,得到以下结果 -

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){

val myJava = MyJava()

val array = intArrayOf(0, 1, 2, 3)

myJava.display("hello",*array)

}

运行代码:MyKotlin.kt ,得到以下结果 -

string is hello

0

1

2

3

Kotlin和Java映射类型

Kotlin和Java类型的映射方式不同,但它们都能映射到相应的类型。 这些类型的映射仅在编译时才有意义,运行时保持不变。

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

Java类型

Kotlin类型

byte

kotlin.Byte

short

kotlin.Short

int

kotlin.Int

long

kotlin.Long

char

kotlin.Char

double

kotlin.Double

boolean

kotlin.Boolean

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

Java类型

Kotlin类型

java.lang.Object

kotlin.Any!

java.lang.Cloneable

kotlin.Cloneable!

java.lang.Comparable

kotlin.Comparable!

java.lang.Enum

kotlin.Enum!

java.lang.Annotation

kotlin.Annotation!

java.lang.Deprecated

kotlin.Deprecated!

java.lang.CharSequence

kotlin.CharSequence!

java.lang.String

kotlin.String!

java.lang.Number

kotlin.Number!

java.lang.Throwable

kotlin.Throwable!

Java盒装原始类型和相应的可空Kotlin类型

Java类型

Kotlin类型

java.lang.Byte

kotlin.Byte?

java.lang.Short

kotlin.Short?

java.lang.Integer

kotlin.Int?

java.lang.Long

kotlin.Long?

java.lang.Character

kotlin.Char?

java.lang.Float

kotlin.Float?

java.lang.Double

kotlin.Double?

java.lang.Boolean

kotlin.Boolean?

Java集合类型和相应的只读或可变Kotlin类型

Java类型

Kotlin只读类型

Kotlin可变类型

Iterator

Iterator

MutableIterator

Iterable

Iterable

MutableIterable

Collection

Collection

MutableCollection

Set

MutableSet

MutableSet

List

MutableList

MutableList

ListIterator

ListIterator

MutableListIterator

Map

Map

MutableMap

Map.Entry

Map.Entry

MutableMap.MutableEntry

¥ 我要打赏

纠错/补充

收藏

加QQ群啦,易百教程官方技术学习群

注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

kotlin 调用java_从Kotlin调用Java代码相关推荐

  1. 装箱算法 java_贪心算法装箱问题-Java代码

    关于装箱问题不作过多阐述了,, 这里用经典的1*1,2*2,3*3,4*4,5*5,6*6来装6*6的箱子,问所需要的箱子最少的个数 下面为Java代码 import java.util.Scanne ...

  2. java调用qq接口_用java代码怎么去请求腾讯接口并返回值

    这是参看代码,你看一下,里面的HttpClient包你要自己去下public static void main(String[] args) { CloseableHttpClient httpcli ...

  3. 【运筹优化】调用Gurobi求解LP问题(Java代码示例)

    文章目录 问题 代码 求解结果 问题 代码 import gurobi.*; /*** @Author:WSKH* @ClassName:TestGurobi* @ClassType:* @Descr ...

  4. 纪念品分组java_纪念品分组 (Java代码)

    题意分析: 这个题在写的时候一定要读好题意,其实就是先给我们两个数分别用来表示总的价格和奖品数,之后再输入每一个奖品的价格,求每一组的价格和不超过总的价格,且每一组最多只有两件物品,求最小的分组数. ...

  5. 大鱼吃小鱼算法java_大鱼吃小鱼-题解(Java代码)

    解题思路: 注意事项: 参考代码:import java.util.Arrays; import java.util.Scanner; public class C2322 { public stat ...

  6. 魔法java_可别在Java代码中写那么多魔法值了

    1. 前言 重构老代码中遇到了不少类似下面这种写法: public void attend(String value) { if ("0".equals(value)) { //t ...

  7. 小翼java_小翼俄罗斯方块java代码

    [实例简介] 感谢小翼的java学习视频教程,个人感觉讲的非常好. 小翼的俄罗斯方块工程项目代码.自己对着视频教学敲的,有些地方对原作者的代码思路有改动.项目完成90%,还有些许功能没有加入进去.下载 ...

  8. 如何用java代码调用ffmpeg进行视频转码

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/lushizhuo9655/articl ...

  9. python调用java代码方法

    前言: 公司要测试对外接口,接口中的数据又涉及到加密的问题,而python对加密数据进行位运算后,居然无法逆向位运算回来了(应该是个人能力不够吧),只好调用同事之前用的java代码中的函数去解码了,花 ...

最新文章

  1. 数学建模——一维、二维插值模型详解Python代码
  2. ext.js组件的基本操作
  3. 代码Review发现问题
  4. django mysql 游标,MySQL Cursor 存储过程之游标与相关循环
  5. 80网口打印机ip固定工具_打印机网络打印
  6. SAP License:家装ERP
  7. 这一次,老罗要干掉微信?
  8. 论文阅读笔记——人脸网络:人脸识别和聚类的统一嵌入
  9. hustoj mysql_hustoj 管理员和后台设置
  10. 服装erp系统的设计方案
  11. Oracle 锁表问题查询处理
  12. dwcs6 mysql站点_dreamweaver cs6中本地站点的管理方法讲解
  13. Markdown数学公式语法、常用符号与字体
  14. 如何从Mixamo下载人物模型的动画
  15. 上传资源中问题的说明
  16. java split 双竖线_HIVE 常用函数及实例
  17. PXI和PXI Express的比较
  18. ckpt下载 deeplabv3_煮酒论英雄:深度学习CV领域最瞩目的成果top46
  19. storm大数据视频教程全集下载
  20. 分布式系统架构的应用

热门文章

  1. wireshark 分析mptcp ecn语句
  2. dismiss 多个viewController
  3. python模块安装
  4. linux常用文本编缉命令(strings/sed/awk/cut/uniq/sort)
  5. bzoj 3671 贪心
  6. SOA研究综述(转)
  7. MATLAB中肤色分割算法_基于MATLAB的车牌字符分割问题
  8. 如何在 Linux 上检查可用磁盘空间 [终端和 GUI]
  9. Audio之音频帧周期(四十三)
  10. WSL2扩展虚拟硬件磁盘( VHD大于256GB报错问题)