Kotlin 中的 Typealias 详解

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 可能很有用,但大部分时间里,它们不应该被使用。在将它们放入你的项目时要小心!

感谢大家的阅读!我希望你们喜欢这篇文章并发现它有用。在评论区告诉我你的想法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值