Kotlin和java混合开发

kotlin继承Java的方法 调用java的方法,参数最好用可空类型,除非明确java的参数是非空
而java代码如果需要可空 可以通过@Nullable 需要不可空 可以通过@Nullable


属性读写
1 kotlin调用java
自动识别 setter和getter
2 java调用kotlin
通过getXX()、setXX()
因为kotlin的属性var firstName: String是会编译为:

private String firstName;public String getFirstName() {return firstName;
}public void setFirstName(String firstName) {this.firstName = firstName;
}// 如果属性的名称以 is 开头如isOpen  其 getter 会称做 isOpen(),而其 setter 会称做 setOpen()

空安全类型:
在kotlin中可以为空,会有空安全保护,而java没有
因此java调用时要去判断
或者通过注解方式@Nullable 、 @NotNull


常见注解:
kotlin中写,给java使用

1 @JvmField
声明属性为真正的java变量
2 @JvmStatic
声明方法为真正的java静态方法
3 @JvmOverload
如果一个方法有N个参数,其中M个具有默认值,则会生成M个重载:第一个重载使用N-1个参数(除了最后一个具有默认值),第二个重载N-2个参数,可以将kotlin带有默认参数的重载方法可以给java使用

@JvmOverloads fun f(a: String, b: Int=0, c:String="abc"){}
相当于在Java中声明了3个方法:
void f(String a)
void f(String a, int b)
void f(String a, int b, String c)

4 @file:JvmName
将kotlin文件编译生成的文件名改成想要的名称


改动:
java的通配符?替换成 kotlin的通配符*


SAM (single abstract method)
单一抽象方法

an interface with a single abstract method
可以用lambda表达式代替这个接口实例
但是想移除却未必能移除到该对象

kotlin目前只支持java的接口

kotlin之间要使用得lambda代替则需要用类型别名

typealias 接口名=lambda格式
如
typealias Runnable=()->Unit

正则表达式:
可以使用Raw String 定义正则表达式,这样就不需要去对字符转义操作

1 可以直接使用java的Pattern对正则表达式操作:

2 也可以用kotlin的Regex:

Regex(正则表达式).findAll(字符串).toList().flatMap(MatchResult::groupValues).forEach(::println)

集合类
java中有 list,set,map
List(有序、可重复)
Set(无序、不能重复)
Map(键值对、键唯一、值不唯一)

kotlin中:

list set map 都是不可加和删的,要加和删得用 mutableList,mutableSet,和mutableMap

val myList = listOf("1","Hello","Kotlin","2")
val myMap = MapOf("key","value","1","Hey","2","Hello")

ArrayList则可以增删

val myarraylist=ArrayList<String>
myarraylist.add("Hello")
myarraylist.add("Kotlin")
myarraylist.remove("Hello")
myarraylist.removeAt(1)

kotlin优化了java的根据某个下标移除元素的操作
即 用 removeAt 避免当 ArrayList是int类型,而元素的值又恰好有0的情况


I/O操作
java的文件读取:

File file = new File("文件名");
BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
while(line=BufferedReader.readLine!=null){System.out.println(line);
}catch(FileNotFoundException e){e.printStackTrace();
}catch(IOException e){e.printStackTrace();
}finally{try{bufferedReader.close();}catch(IOException e){e.printStackTrace();}}
}
}

而Kotlin :

val file =File("文件名")
val bufferedReader = BufferedReader(FileReader(file)).use{
while(true){val line = bufferedReader.readLine()?:breakprintln(line)
}
}

通过use方法包含方法体,可以省略使用.close的操作


kotlin也提供了很多的扩展方法,对小文件读取,可以简化代码

File("文件名").readLines().forEach(::println)

装箱和拆箱:
java有 int, double,boolean等基本类型,还有Int,Double,Boolean等对象类型
装箱:将基本数据类型 int, double,boolean等类型转化为Int,Double,Boolean对象类型,这个过程是java虚拟机自动对其转换的
拆箱:装箱的逆过程

而kotlin只有Int,Double,Boolean对象类型,会自动对数据类型装箱


注解处理器
如使用dagger2实现注解方式的依赖注入
kotlin:
首先要在项目工程中:

apply plugin:"kotlin-kapt"

如果你以前使用 android-apt 插件,请将其从 build.gradle 文件中删除,并用 kapt 取代 apt 配置的用法。如果你的项目包含 Java 类,kapt 也会顾全到它们。

如果为 androidTest 或 test 源代码使用注解处理器,那么相应的 kapt 配置名为 kaptAndroidTest 和 kaptTest。请注意 kaptAndroidTest 和 kaptTest 扩展了 kapt,所以你可以只提供 kapt 依赖而它对生产和测试源代码都可用。
dependencies 中:

kapt "com.google.dagger:dagger-compiler:$dagger-version"

Kotlin和java混合开发相关推荐

  1. 入门 Kotlin 和 Java 混合开发

    一.前沿 如果你学习过其他的编程语言,你就会发现 Java 的语法很是哆嗦,可是我们为什么没有放弃 Java 这门编程语言呢?因为 JVM 是一个非常好的平台,而且 Java 程序员目前在中国所占的比 ...

  2. Kotlin和Java混合开发总结(基于Kotlin1.3.0版本)

    我本来是不想学习kotlin的,但是现在的形势,很多公司都在使用kotlin开发,可以说学会kotlin也是无奈之举,既然是潮流,谷歌也在大力推广,所以还是只能硬着头皮逼迫自己学一下,也能更快适应公司 ...

  3. kotlin与java混合开发_使用kotlin和Java混合开发Android项目爬坑记录

    使用kotlin和Java混合开发Android项目爬坑记录 不定期将开发过程中遇到的问题添加在此处,加深记忆. 主要内容包括但不限于java与kotlin语言的一些区别,以及在使用android-s ...

  4. 《Kotlin从小白到大牛》第21章:Kotlin与Java混合编程

    第21章 Kotlin与Java混合编程 Kotlin毕竟还是一种新的语言,所以很多项目.组件和框架还是用Java开发的,目前Kotlin不能完全取代Java,因此有时会使用Kotlin调用Java写 ...

  5. java scala 混合打包_scala和java混合开发打包

    如何进行scala和java混合开发打包? 首先创建maven工程,在pom.xml添加一下依赖 1.8 UTF-8 3.8.1 1.6.4 3.1 2.11.8 2.3.2 org.scala-la ...

  6. 《Springboot极简教程》Springboot使用Kotlin和Java混合编程

    配置 要想实现Springboot使用Kotlin和Java混合编程,需要使用kotlin插件: spring-boot-gradle-plugin kotlin-gradle-plugin 具体配置 ...

  7. Kotlin 为什么可以和Java混合开发

    学! 本文:https://www.jianshu.com/p/e3afe651052b 文章目录 前言 Kotlin 互操作性 总结 参考文献 前言 闲来无聊,和一个朋友聊天. 他突然问我:你知道K ...

  8. 为什么 Java 后端开发没有大规模采用 Kotlin?

    点击关注公众号,Java干货及时送达 转自:InfoQ 作者:Ivan Sanchez,  译者:王者 链接:www.infoq.cn/article/dSSYAFSMMxx1sZkJwrN2 在使用 ...

  9. 开发Android应用用Kotlin还是Java?

    还记得多年前有关Android与iOS孰优孰劣的辩论吗?如今,Kotlin与Java的争论,时常广泛地发生在开发人员之中.不过,由于大家往往关注的是Java所不具备的Kotlin功能,因此他们的结论可 ...

最新文章

  1. R语言基于机器学习算法进行特征筛选(Feature Selection)
  2. GNU Radio的hello world(转)
  3. 陕西宝鸡2021年高考成绩查询,2021年宝鸡网上查询中考成绩
  4. Java中Map的entrySet()详解 || Map.Entry的详解
  5. Android布局琐碎(原)
  6. 【学习笔记】17、函数(Function)的定义和调用
  7. 【dfs】家族(jzoj 1985)
  8. Android使用BaseAdapter绑定ListView实现不同item的TextView多种文字变色
  9. Angular 启动项目时 port 4200 is already in use 解决方法
  10. python学习--关注容易被忽略的知识点--(五)面向对象编程
  11. 遍历对象键值对的两种方法
  12. Cors 跨域 共享
  13. 分享一个查看JSON的程序
  14. Tomcat9的安装以及配置环境
  15. Scrapy豆瓣电影top250(excel保存和图片下载)
  16. 天数怎么换算成月_表格当中把天数换算成月怎么
  17. listbox java_listbox读取数据库
  18. 【python】腾讯云+python SDK免费发送短信
  19. NOIP复赛中低级错误排行榜
  20. 如何通俗理解信创国产化是什么意思?有哪些系统?有什么意义?

热门文章

  1. 用vue编写带动画效果的toast
  2. APP需要关注哪些安全问题
  3. 华农计算机研究生分数线,2020华南农业大学研究生分数线汇总(含2016-2019历年复试)...
  4. SEO前端篇(一)页面布局
  5. DIV+CSS中的相对定位和绝对定位
  6. 现场抽奖小程序_小程序直播怎么引爆现场,小程序直播中 4大互动促转玩法
  7. Win10 蓝牙鼠标,删除失败
  8. springSecurity标签,特别是@PreAuthorize
  9. 定义函数 求sinh(x)的值。
  10. 「学习笔记」移动Web开发之rem适配布局10