Kolin学习笔记十

  • kotlin与java
    • 可空性
    • 互操作性
    • @JvmName
    • @JvmFiled
    • @jvmoverloads
    • @jvmstatic
    • 异常捕捉
    • 函数类型操作

kotlin与java

可空性

kotlin调用java代码,因为kotlin存在可空性,所以当java方法返回空,当kotlin调用时,可能会报错。这里有一个平台类型,例如 String!,代表可能为空,可能不为空
重点:kotlin调用java ,一般加上?空安全操作符使用,或者使用notnull注解

互操作性

kotlin调用java 可以直接属性访问,a.name=
其实还是调用了get 和set方法。

kotlin顶层函数在java里都被当做静态方法看待和调用

@JvmName

指定编译类的名字。如果我们的方法没有写在类里,java需要调用,就使用@jvmName来指定名字
在koltin文件里 @file:jvmName(“xxx”)

那么在java里调用kotlin文件的方法,就能用xxx代替文件名

@JvmFiled

使得java访问kotlin类的属性,不用getxxx()这样调用,而是对象名.xxx=这样调用,也可以让java直接访问伴生对象里的属性。但是kotlin调用java,访问对象属性,可以直接按kotlin的方式来,上面有提到。

@jvmoverloads

因为kotlin的类方法存在默认值的情况,在kotlin中,可以只传全部参数中的几个,但给java调用时,得在kotlin函数上方加上 @ jvmoverloads,强制重载,这样java调用kotlin时,也能和kotlin一样,只用传其中的几个参数。

这个十分重要,因为写一个API,我们不应该只考虑kotlin开发者,还需要考虑java用户调用这个api是否方便。

@jvmstatic

作用和@jvmfiled类似,允许java直接调用伴生对象里的方法。

异常捕捉

@throw(xxxException::class)
kotlin方法抛出的异常,java调用时,是按throwable处理的,如果我们要指定java捕捉某种异常类型,就在kotlin方法上面,使用@throws注解,这样java调用时,就能捕捉特地的异常了,而不是throwable

函数类型操作

kotlin中的函数类型,其实就是类似于
val funTest:(String)->String={it->

}
这样的,匿名函数作为变量。
当java调用kotlin的函数类型时,使用FunctionN这样的名字的接口表示,N表示参数数目(N 0-23)。

//kotlin
class A{val  funTest:(String)->String={it->
}
}
//java
A a=new A()
Function1<String,Stirng> translator= a.funTest()
translator.invoke("ssss")

Kolin学习笔记十-kotlin与java互操作相关推荐

  1. Python语言入门这一篇就够了-学习笔记(十二万字)

    Python语言入门这一篇就够了-学习笔记(十二万字) 友情提示:先关注收藏,再查看,12万字保姆级 Python语言从入门到精通教程. 文章目录 Python语言入门这一篇就够了-学习笔记(十二万字 ...

  2. 电脑安装python3.74_python3.4学习笔记(十六) windows下面安装easy_install和pip教程

    python3.4学习笔记(十六) windows下面安装easy_install和pip教程 easy_install和pip都是用来下载安装Python一个公共资源库PyPI的相关资源包的 首先安 ...

  3. Java 学习笔记:第一章 Java入门

    Java 学习笔记:第一章 Java入门 1.1 计算机语言发展史以及未来方向 1.2 常见编程语言介绍 C语言 C++ 语言 Java语言 PHP 语言 Object-C和Swift 语言 Java ...

  4. Polyworks脚本开发学习笔记(十八)-用SDK开发Polyworks插件

    Polyworks脚本开发学习笔记(十八)-用SDK开发Polyworks插件 插件是由PolyWorks加载的动态链接库(DLL文件),然后查询Polyworks模块,以确定它们具有哪些功能,提供给 ...

  5. Java学习笔记(7)——Java基础之IO多线程网络思维导图

    Java面向对象学习笔记之:包括IO(字节流,字符流,节点流,处理流).线程(线程创建,线程控制,线程同步).网络(TCP Scoket,  UDP Scoket)(全屏观看Java学习笔记(7)-- ...

  6. IOS之学习笔记十五(协议和委托的使用)

    1.协议和委托的使用 1).协议可以看下我的这篇博客 IOS之学习笔记十四(协议的定义和实现) https://blog.csdn.net/u011068702/article/details/809 ...

  7. 吴恩达《机器学习》学习笔记十四——应用机器学习的建议实现一个机器学习模型的改进

    吴恩达<机器学习>学习笔记十四--应用机器学习的建议实现一个机器学习模型的改进 一.任务介绍 二.代码实现 1.准备数据 2.代价函数 3.梯度计算 4.带有正则化的代价函数和梯度计算 5 ...

  8. 吴恩达《机器学习》学习笔记十二——机器学习系统

    吴恩达<机器学习>学习笔记十二--机器学习系统 一.设计机器学习系统的思想 1.快速实现+绘制学习曲线--寻找重点优化的方向 2.误差分析 3.数值估计 二.偏斜类问题(类别不均衡) 三. ...

  9. 吴恩达《机器学习》学习笔记十——神经网络相关(2)

    吴恩达<机器学习>学习笔记十--神经网络相关(2) 一. 代价函数 二. 反向传播算法 三. 理解反向传播算法 四. 梯度检测 五. 随机初始化 1.全部初始化为0的问题 2.随机初始化的 ...

最新文章

  1. Myeclipse出现 java文件中文乱码问题
  2. 我就是我,不一样的browser
  3. android gridview控件使用详解_作为Android 开发者该如何进阶?
  4. C语言学习之有一个分数序列2/1、3/2、5/3、8/5、13/8、21/13,……求出这个数列的前20项之和。
  5. 关于梦想--------听说标题够长才有人看
  6. beego 例子_beego框架代码分析
  7. java 实体字段变更记录_java – Hibernate:检查哪个实体的字段被修改
  8. Android SharedPreference最佳实践
  9. AcWing479.加分二叉树(区间DP)题解
  10. 2017级C语言大作业 - 见缝插针
  11. CentOS下安装JDK完整步骤
  12. basis问题专区(文档)
  13. sqlmap注入语句整理
  14. ERP软件的相关运营问题
  15. 用 Python 写一个经典微信飞机大战
  16. Revit二次开发——预制构件自动配筋演示
  17. 用vba加载宏求地图分幅
  18. JS设计模式 - 单例模式
  19. HDU5510 Bazinga(KMP)
  20. 一文理解完美二叉树, 完全二叉树和完满二叉树

热门文章

  1. webservice使用总结
  2. 单片机工程师资格认证考试大纲
  3. 数据库系统设计课程总结3-sql 进阶
  4. html转换成pdf
  5. golang 采集图片
  6. FreeRTOS学习记录 02--任务篇
  7. 「产品篇」分账系统是如何设计的?
  8. ArcBlock周报 | 坚定布道回归本源 国际招募收获颇丰
  9. 戴尔笔记本如何查看HTML代码,戴尔笔记本win7系统如何查看电脑型号
  10. FOC Simulink仿真 --- 0.FOC概述及组成部分