gpt4 book ai didi

Kotlin 类型安全的类型别名

转载 作者:IT老高 更新时间:2023-10-28 13:45:17 25 4
gpt4 key购买 nike

我在 Kotlin 代码中经常使用类型别名,但我想知道是否可以对它们强制执行类型安全。

typealias Latitude = Double
typealias Longitude = Double

fun someFun(lat: Latitude, lon: Longitude) {...}

val lat: Latitude = 12.34
val lon: Longitude = 56.78
someFun(lon, lat) // parameters are in a wrong order, but the code compiles fine

如果我能以某种方式阻止类型别名之间的隐式转换,那就太好了,有助于避免此类问题。

当然,存在一个问题,即对基本类型的操作不适用于类型别名,但可以通过扩展函数(或强制转换)来解决。

我不想使用包含单个字段的数据类,因为这似乎有点矫枉过正,尤其是对于原始类型(或者我错了,它们会被优化掉?)

所以问题是:我可以以某种方式强制类型别名的类型安全吗?

最佳答案

Kotlin 1.3 更新

从 Kotlin 1.3 开始,内联类已经可用,目前被标记为实验性的。 See the docs

原答案

很遗憾,您目前无法避免这种情况。有一个功能正在进行中 - inline classes (#9 in this document) ,这将解决运行时开销的问题,同时强制编译时类型安全。它看起来与 Scala's value classes 非常相似,如果您有大量数据,这很方便,而普通案例类将是开销。

关于Kotlin 类型安全的类型别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50027726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com