联合类型,也被称为求和类型,是一种强大的语言特性,在TypeScript中我经常使用它们。
大致意思如下:
let a: string | number = “hello”
a = 3
我该如何在Kotlin中实现这种行为?
我看到一些人谈论使用继承和密封类来实现这个目标,但似乎如果想要对原始类型(例如String和Int)使用这种方法,那么就必须编写包装器来访问底层值。
我想知道是否有更实用的解决方案。
联合类型,也被称为求和类型,是一种强大的语言特性,在TypeScript中我经常使用它们。
大致意思如下:
let a: string | number = “hello”
a = 3
我该如何在Kotlin中实现这种行为?
我看到一些人谈论使用继承和密封类来实现这个目标,但似乎如果想要对原始类型(例如String和Int)使用这种方法,那么就必须编写包装器来访问底层值。
我想知道是否有更实用的解决方案。
Roman Elizarov 在 2021年11月19日18:14发表了评论
关于此问题的简短更新。这是一个有趣且重要的功能,但在向后兼容和实用的方式下将其集成到语言中确实很困难。当我们发布新的K2编译器时,我们将完全开始着手处理它,并且我们最好的编译器工程师将能够开始研究。
var x: Any = 5
x = "hello"
但是你可以注意到,X不仅能够保存字符串和整数等任何类型,还可以使用Arrow库中的“Either”类(如果我没有弄错的话),可以实现这种行为:
var x = Either<Int, String>(5)
无论如何,我并不确定为什么你需要这样一个变量。
Either
是另一种单子,通常用于函数式编程。一个典型的使用场景是在方法中当意图返回值(这里是Int)的计算失败时返回一个错误消息。它避免了类型转换,无论是否聪明都需要进行(在第一种情况中需要执行任何有意义的操作)。 - thinkgruen