📜  如何在 Kotlin 中使用内联属性?

📅  最后修改于: 2022-05-13 01:54:37.083000             🧑  作者: Mango

如何在 Kotlin 中使用内联属性?

在本文中,我们将讨论如何在 Kotlin 中使用内联属性。但在此之前,您应该了解一些函数的基础知识,并且应该熟悉 OOP 的概念。 Kotlin 的一大优点是高阶函数,它让我们可以将函数用作其他函数的参数。然而,它们是对象,所以它们存在内存开销(因为每个实例都在堆中分配空间,我们也需要调用函数的方法)。我们可以使用内联函数来改善这种情况。内联注解意味着具体的函数,连同函数参数,将在调用处展开;这有助于减少呼叫开销。类似地, inline 关键字可以与没有支持字段的属性和属性访问器一起使用。

例子

让我们看看如何在这些步骤中使用内联属性:

1.让我们尝试一个在 Kotlin 中内联属性访问器的示例:

Kotlin
var x. valueIsMaxedOut : Boolean
inline get () = x. value == CONST_MAX


Kotlin
inline var x. valueIsMaxedOut: Boolean 
get () = x. value == CONST_MAX 
set (value) { 
  // set field here
  printin ("Value set!")
}


Kotlin
var x. valueIsMaxedOut : Boolean = true 
get () = x. value == CONST_MAX 
set (value) {
  // set field here
  printin ("Value set!")
}


2.在本例中,我们只是将inline关键字与 get 访问器一起使用。我们还可以通过使整个属性内联来将 get 和 set 访问器声明为内联,如以下代码片段所示:

科特林

inline var x. valueIsMaxedOut: Boolean 
get () = x. value == CONST_MAX 
set (value) { 
  // set field here
  printin ("Value set!")
}

在前面的代码片段中,两个访问器都是内联的。

3.但要记住的一件事是,如果属性具有支持字段或评估者未引用支持字段,则内联不适用于属性或访问器。这里的代码是我们不能使用inline的场景示例:

科特林

var x. valueIsMaxedOut : Boolean = true 
get () = x. value == CONST_MAX 
set (value) {
  // set field here
  printin ("Value set!")
}

要记住的另一件事是,尽管内联属性通过仅在调用站点扩展来减少调用开销,但它们也增加了整体字节码,因此内联不应该与大型函数或访问器一起使用。

因此,基本上,当我们希望减少内存开销时,我们使用内联。与内联函数一样,我们也可以将属性声明为内联或将属性的访问器声明为内联。但是,要记住的一件事是内联显着增加了字节码,因此建议不要内联具有大量代码逻辑的函数或访问器。