首页 > 编程知识 正文

kotlin和java混合开发在生产环境的应用,kotlin开源吗

时间:2023-05-05 15:21:40 阅读:285554 作者:3687

Kotlin和java混合开发

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

属性读写
1 kotlin调用java
自动识别 setter和getter
2 java调用kotlin
也是通过setter和getter

空安全类型:
在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"

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。