android - kotlin 中的内联类是什么?

标签 android kotlin

内联类:Inline classes

我想知道内联与 kotlin 中其他类的确切区别是什么?我想知道确切的内联类是做什么的,我们什么时候会用到它?

最佳答案

内联类只是对基本类型和字符串的某种类型包装器。

例如,假设我们有这样一个接口(interface)声明:

interface ResizeableView {
    fun resize(width: Int, height: Int)
}

每次开发人员需要调用此方法时,他需要先检查参数顺序,以免混淆宽度和高度。

而且,如果参数最终搞砸了怎么办?

val width: Int = someObject.width
val height: Int = someObject.height
resizeableView.resize(height, width) //compiles ok and brings a bug to the program

这个例子简单明了,但对于其他一些情况,当一个方法声明了一堆符合单一类型的原始类型参数时,程序的不需要的行为可能不太容易理解,因此检测到参数混淆.

内联类对此有帮助:

inline class Width(val value: Int)
inline class Height(val value: Int)

interface ResizeableView {
    fun resize(width: Width, height: Height)
}

因为 WidthHeight 现在是不同的类型,所以在调用该方法时消除了混淆。

val width: Width = someObject.width
val height: Height = someObject.height
resizeableView.resize(height, width) //compile-time error

但是这里的 inline 修饰符有什么意义呢?为什么不使用 class Width? 关键是 inline classes 仅在编译类型时引入类型,而在运行时这些变量将只是 int -s,因此不会产生运行时开销。

Here是内联类应用程序的一个很好的真实示例。

关于android - kotlin 中的内联类是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55625960/

相关文章:

java - 如何检测已接电话?

java - 是否有一种通用的方法来反序列化 Jackson 中的单值对象(没有自定义反序列化器)

android - 调整方向变化的 View

Android Camera2 预览在风景中旋转 90 度

Android:如何更改模拟器中的时间?

android - 在媒体播放器上播放多首歌曲

android-studio - 如何在 kotlin 中找到文件的路径?

android - MVP Presenter 未正确注入(inject)

java - Spring Boot Kotlin项目无法在运行时加载Java类

android - 如何使用 kotlin android 更新我的 Recyclerview?