📜  类型别名与内联类

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

类型别名与内联类

Kotlin 是一种编程语言,它将现代编程语言的所有功能带到了 android 开发中。在本文中,我们将讨论它的两个很酷的特性,即类型别名和内联类。

类型别名

假设您正在创建一个项目,其中定义了两个具有相同名称但不同包的类。在需要时,您需要为第二个使用整个包名点类名格式。例如,您有一个名为“geek”的类,一个在“com.gfg.apps”包中,另一个在“com.gfgpractice.apps”中,您可以通过简单的导入使用其中一个,如果您想使用第二个,您可以必须使用完整的包名,如“com.gfgpractice.apps.geek”。
在这里,类型别名出现了,类型别名提供了一种方法来为我们复杂或过长的类名定义一个替代名称。类型别名不会引入新类型。它们与相应的底层类型相同。
在我们上面的场景中,我们可以这样做:

typealias geek = com.gfg.apps.geek 

并在我们想要的任何地方使用名称geek而不是“com.gfg.apps.geek”,而无需在每次使用时定义它的更长版本。
演示类型别名的 Kotlin 示例 –

Java
// here we define a type alias named key_values
// which will take two parameters int and string
typealias Key_values = Pair
fun main() {
    // we are setting two games but we don't
    // have to define Pair each time while using it
    val game1 = Key_values( 1, "Cricket")
    //instead we can directly use our type alias Key_values.
    val game2 = Key_values(2, "Football")
 
    println(game1)
    println(game2)
}


Java
interface Print {
    fun geekPrint(): String
}
 
inline class Value(val s: String) : Print {
    override fun geekPrint(): String = "Hello $s!"
}   
 
fun main() {
    val name = Value("World")
    println(name.geekPrint())
}


输出:

(1, Cricket)
(2, Football)

内联类

内联类添加了具有原始数据类型值范围的 TypeAliases 的特性。在某些情况下,需要围绕特定类型创建包装器,这将导致运行时额外的堆分配。为了解决这个问题,引入了内联类的概念。在这个概念中,类的数据被“内联”到它的使用中。
注意:内联类引入了一种真正的新类型,与类型别名相反,类型别名只为现有类型引入替代名称(别名)。
Kotlin 程序演示内联类——

Java

interface Print {
    fun geekPrint(): String
}
 
inline class Value(val s: String) : Print {
    override fun geekPrint(): String = "Hello $s!"
}   
 
fun main() {
    val name = Value("World")
    println(name.geekPrint())
}

输出:

Hello World!