Kotlin 中的 Typealias 详解
简而言之,typealias 是为现有类型赋予一个新名称的方式。 系好安全带,开车!
为什么你应该使用它们?
可读性:你可以为你的类型提供更有意义的名称。效率:你没有引入可能减慢代码的包装器等。 这是两个主要优点。让我们看看如何在代码中使用它们:
简单示例
假设你将 String 作为 Person 的 ID 传递,你可以为 PersonID 编写一个 typealias:
typealias PersonID = String
fun insert(id: PersonID) {
...
}
这比在项目中到处传递 String 时更具可读性。它还使得查找与 PersonID 相关的地方更简单,因为它在项目中无处不在。
当新成员在某个地方使用 String 而不是 PersonID 时,这可能成为问题,你将失去大部分好处。
何时不使用
很多人对 typealias 有误解。以下是你不应该使用它们的方式:
fun calculateDistance(aX: Int, aY: Int, bX: Int, bY: Int) {
...
}
你可以使用 typealias 替换它:
typealias Point = Pair<Int, Int>
fun calculateDistance(pointA: Point, pointB: Point) {
val (aX, aY) = pointA
// 或者可能是
val (aY, aX) = pointA
// 由于错误使用 typealias,我们不知道哪个是 X,哪个是 Y
...
}
我们没有获得可读性,反而产生了一个问题,不知道哪个是 X,哪个是 Y。对于像这样的情形,简单地使用数据类。你绝不应该使用 typealias 来代替 Pair。
实际项目示例
假设你使用的两个库有冲突的名称。你可以为其中一个甚至两者编写 typealias 以简化代码中的导入:
fun mapColor(color: com.something.Color): org.somethingelse.Color {
...
}
当你不得不写完整的限定名时,这很难阅读。你可以用 typealias 替换它们中的一个,并使用另一个作为导入:
import org.somethingelse.Color
typealias SomethingColor = com.something.Color
fun mapColor(color: SomethingColor): Color {
...
}
总之,typealiases 可能很有用,但大部分时间里,它们不应该被使用。在将它们放入你的项目时要小心!
感谢大家的阅读!我希望你们喜欢这篇文章并发现它有用。在评论区告诉我你的想法。