什么是 kotlin 中的内联类?

May*_*tel 4 android kotlin

内联类:内联类

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

And*_*nin 11

内联类只是对原始类型和字符串的某种类型化包装。

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

interface ResizeableView {
    fun resize(width: Int, height: Int)
}
Run Code Online (Sandbox Code Playgroud)

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

还有,如果参数最终搞砸了怎么办?

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

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

内联类对此有帮助:

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

interface ResizeableView {
    fun resize(width: Width, height: Height)
}
Run Code Online (Sandbox Code Playgroud)

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

val width: Width = someObject.width
val height: Height = someObject.height
resizeableView.resize(height, width) //compile-time error
Run Code Online (Sandbox Code Playgroud)

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

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