学习完基础语法之后,我们来学习下 Java 和 Kotlin 互相调用的问题

本节将介绍 Kotlin 与 Java 之间的语法变化

Kotlin 文件中的函数

首先让大家感到非常不适应的一点是,Kotlin 的函数居然可以直接写在文件中,而不用写在类中,但如果你知道 Kotlin 的代码编译以后依旧是 JVM 平台的一个 class,这一点应该就很好理解了。 例如,我们在 Utils.kt 中写如下函数:

在 Java 的类中可以做如下的调用:

从调用可以看出,Kotlin 文件中的函数编译后直接转换为对应文件名 + Kt 类中以 public static 开头的方法。

object 关键字

还有一种 Kotlin 中特殊的语法,object + 类声明,这种写法是在 Kotlin 中创建一个匿名内部类的写法:

如果在 Kotlin 代码中则可以直接调用:

如果在 Java 代码调用,需要使用以下方法:

简单分析下,其实构造方法变成了私有方法,暴露了一个静态的当前实例 INSTANCE ,通过它我们可以访问到其中的方法。

通过 Java 代码调用我们能够看出, object 关键字的类其实是 Kotlin 单例的一种写法。

Class 和 KClass

使用 Java 时我们有的时候传递某个类的 class,但是在 Kotlin 中调用 Java 类的 class 需要在后面追加 .java,例如我们有一个 JavaMain.java 的 Java 类,我们使用它的 class 时则需要这样调用:JavaMain::class.java。

为什么会有这样的特殊语法呢?这是因为 Kotlin 的 class 和 Java 的 class 格式是不一致的。 在 Kotlin 中,所有的类并不是编译成 Class,而是编译成 KClass,例如:

与 Java 在关键字上的冲突

例如在 Java 类中有一个变量 in :

而 in 在 Kotlin 中是一个关键字,如果在 Kotlin 中调用就会报错

正确调用方法应该是将该变量使用两个反引号包裹(`)

以上就是本节内容,欢迎大家关注~

java object类_快速上手 Kotlin 开发系列之与 Java 互调 (1)相关推荐

  1. 快速上手 Kotlin 开发系列之数据类和枚举

    本节讨论 Kotlin 的数据类.枚举类和密闭类. 数据类 数据类是 Kotlin 中很特殊的一种类,它可以将我们类中的成员变量自动的生成 getter/setter 方法,以及我们经常需要重写的 t ...

  2. java 映射类_将数据库类型映射到具体的Java类

    解 答案比使用getMetaData方法更复杂,因为getMetaData方法返回的整数类型和完整的类名没有直接映射.此解决方案需要两段代码: >实现一个方法来获取java.sql.Types常 ...

  3. java转安卓快吗_安卓Kotlin开发系列之Java快速转Kotlin

    原标题:安卓Kotlin开发系列之Java快速转Kotlin 自从Kotlin被宣布为Android开发语言的官方支持后,如今可谓是火的一塌糊涂,作为一名Android程序员,如何快速爬坑?今天为大家 ...

  4. 几个特性,快速上手Kotlin

    前言 因为工作需要,所以最近大量的时间都用在了对Kotlin的提升上.所以最近的文章基本都是关于Kotlin的了内容. 这不是一个死扣细节的文章,而是一个帮助小伙伴们快速由Java(Android)转 ...

  5. 复习Object类_日期时间类_System类_StringBuilder_包装类以及各类的细节

    Object类_日期时间类_System类_StringBuilder_包装类以及各类的细节 主要内容 Object类 Date类 DateFormat类 Calendar类 System类 Stri ...

  6. WijmoJS 2019V1正式发布:全新的在线 Demo 系统,助您快速上手,开发无忧

    2019独角兽企业重金招聘Python工程师标准>>> 下载WijmoJS 2019 v1 WijmoJS是为企业应用程序开发而推出的一系列包含HTML5和JavaScript的开发 ...

  7. AI专家一席谈:复用算法、模型、案例,AI Gallery带你快速上手应用开发

    摘要: 华为云社区邀请到了AI Gallery的负责人严博,听他谈一谈AI Gallery的设计初衷.经典案例以及未来规划. 本文分享自华为云社区<AI专家一席谈:复用算法.模型.案例,AI G ...

  8. java基础之Object类_繁星漫天_新浪博客

    在JDK中提供了一个Object类,它是所有类的父类,即每个类都直接或间接继承该类. 例如: class Cat  { public void shout(){ System.out.println( ...

  9. 【Scala教程】如何在已掌握的Java知识基础上快速上手Scala?【个人学习记录】

    如何在已掌握的Java知识基础上学习Scala 前言 正文开始! 1. 编译运行 2. 声明变量 3. 输出 4. 显式指定变量类型 5. 范围区间 6. 写入文本文件 7. 读取文本文件 8. if ...

最新文章

  1. SAP MM 如何通过SAP User ID拿到User的基本信息?
  2. 深度学习利器:TensorFlow在智能终端中的应用——智能边缘计算,云端生成模型给移动端下载,然后用该模型进行预测...
  3. 如何快速理解递归——看这个就可以了
  4. linux i2c触摸屏驱动程序,触摸屏i2c设备和驱动的创建流程及方法
  5. Python 多线程爬取西刺代理
  6. ES6/03/函数的定义方式和调用方式,函数内的this指向,改变函数中this指向的三个方法(call(),apply(),bind())
  7. oracle+生成+sql语句,Oracle使用SQL语句生成日历的实现方法
  8. 通过pxe远程安装linux,通过PXE远程安装Linux系统
  9. 脱库数据分享论坛_22G疑为12306脱库文件大揭秘
  10. DUMP-CX_SY_OPEN_SQL_DB-DBSQL_DUPLICATE_KEY_ERROR
  11. JS对List集合进行排序
  12. MemTest64内存测试
  13. ORBSLAM3整体框架
  14. 人脸识别-特征脸方法
  15. 从链家网上爬取租房数据并进行数据分析
  16. 吴忌寒何以成“眼中钉”?
  17. html情侣相册,浪漫的情侣相册名字
  18. 【生信】全基因组关联分析(GWAS)原理
  19. 校园网同时连手机和电脑、用数据线给电脑连网
  20. 平面直角系【坐标系旋转】、【点绕坐标系旋转】、【A点绕B点旋转】

热门文章

  1. 求助求助给win10安装智能abc结果电脑废了
  2. 计算机的认识文档,认识计算机教案
  3. 【Python 第5课】变量
  4. 药品药店管理系统c语言设计,java毕业设计_springboot框架的药店药品货架管理系统...
  5. JSP学习笔记(五)文件上传
  6. 0xC0000005: 写入位置 0x00000000 时发生访问冲突
  7. ufs 固态硬盘_手机机身存储到底有多快?UFS闪存和电脑固态硬盘谁更强?
  8. rs485如何使用_电子尺及电阻尺距离传感器是如何选择的?
  9. Andrew机器学习第一课
  10. xml文档声明及基本语法