Kotlin和java混合开发

版权声明:本博客仅用于学习交流,欢迎转载,但请注明作者和出处 https://blog.csdn.net/weixin_37577039/article/details/78948406

Kotlin和java混合开发


属性读写
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
将kotlin带有默认参数的重载方法可以给java使用
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()?:break
    println(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"
阅读更多
换一批

没有更多推荐了,返回首页