内联类: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)
}
因为 Width
和 Height
现在是不同的类型,所以在调用该方法时消除了混淆。
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/