Android---Kotlin 学习013

互操作性和可空性

Java 世界里所有对象都可能是 null,而 kotlin 里面不能随便给一个变量赋空值的。所有,kotlin 取调用 java 的代码就很容易出现返回一个 null,而 Kotlin 的接收对象不能为空,你不能想当然地认为 java 的返回值就能符合 kotlin 关于空值的规定。

此时,因为不知道返回的是否是 null,所以可以使用空安全操作符。如果为空,则不执行后面的函数。

类型映射

代码运行时,所有的映射类型都会重新映射回对应的 Java 类型。

示例:

在 java 里声明一个 int 类型变量

java 复制代码
public int score;

在 kotlin 里面调用这个属性,查看其类型

Kotlin 复制代码
// 类型映射
println(StudentInfo.score.javaClass)

属性访问

kotlin 访问 java 的属性时,不需要调用相关 get() 方法。给 java 属性赋值时,也可以使用赋值语法来设置一个 Java 字段值。

@JvmName

可以使用 @JvmName 注解指定编译类的名字

示例:在 java 中调用 kotlin 的函数。

可以看到,java 里使用 kotlin 文件里的函数时,会在函数名后加Kt(xxxKt)形成接收者。如果我们想要原来的名,而不加 Kt,那么就可以使用 @JvmName 来指定类名。

@JvmField

在 Java 里,不能直接访问 kotlin 的属性,例如 spells 属性,必须调用 getSpells() 方法。然而,你可以给 Kotlin 属性添加 @JvmField 注解,暴露它的支持字段给 Java 调用者,从而避免使用 get() 方法。与 kotlin 里直接访问 java 属性一样。

@JvmOverloads

@JvmOverloads 注解协助产生 Kotlin 函数的重载版本。设计一个可能会暴露给 Java 用户使用的 API 时,记得使用 @JvmOverloads 注解。这样,无论你是 Kotlin 开发者还是 Java 开发者,都会对这个 API 的可靠性感到满意。

如果在 java 里调用 deskmate() 只传一个参数,肯定会报错

为了实现和 kotlin 里一样的效果,只传一个参数,另一个参数使用默认值,那么就可以使用 @JvmOverloads 注解进行强制重载。

@JvmStatic

@JvmField 注解还能用来以静态方式提供伴生对象里定义的值。

@JvmStatic 注解的作用类似于 @JvmField,允许你直接调用伴生对象里的函数

@Throws

抛出一个需要检查的指定异常,Java 和 Kotlin 有关异常检查的差异让 @Throw 注解给解决掉了,在编写供 Java 开发者调用的 Kotlin API 时,要考虑使用 @Throws 注解,这样,用户就知道怎么正确处理任何异常了。

Kotlin 复制代码
@Throws(IOException::class)
fun acceptApology(){
    throw IOException()
}

示例:kotlin 里抛出异常,在 java 里处理

函数类型操作

函数类型和匿名函数能提供高效的语法用于组件间的交互,是 Kotlin 编程语言里比较新颖的特性。它们简洁的语法因->操作符实现,但 Java8 之前 JDK 版本并不支持 lambda 表达式。在 Java 里,Kotlin 函数类型使用 FunctionN 这样的名字的接口来表示,FunctionN 中的 N 代表值参数目。这样的 Function 接口有 23 个,从 Function0 到 Function22,每一个 FunctionN 都包含一个 invoke 函数,专用于调用函数类型函数,所以,任何时候需要调一个函数类型,都用它调用 invoke。

相关推荐
f305170923 分钟前
Python实现数据可视化用Matplotlib轻松创建专业级图表
android
2501_915918414 小时前
iOS 26 App 性能测试|性能评测|iOS 26 性能对比:实战策略
android·macos·ios·小程序·uni-app·cocoa·iphone
咋吃都不胖lyh8 小时前
SQL-多对多关系
android·mysql·数据分析
cyy2989 小时前
android 屏幕适配
android
Digitally10 小时前
如何通过 5 种有效方法同步 Android 和 Mac
android·macos
爱学啊12 小时前
3.Android Compose 基础系列:在 Kotlin 中创建和使用函数
kotlin·compose·android compose开发基础
行墨12 小时前
Jetpack Compose 深入浅出(二)——基础组件Text
android
低调小一13 小时前
LRU缓存科普与实现(Kotlin 与 Swift)
开发语言·缓存·kotlin
雨白13 小时前
深入理解协程的运作机制 —— 调度、挂起与性能
android·kotlin
沐怡旸14 小时前
【Android】Android系统体系结构
android