gpt4 book ai didi

kotlin - 对于强制相同类型的 2 个参数的通用类型 T 有什么方法吗?

转载 作者:行者123 更新时间:2023-12-01 15:07:06 25 4
gpt4 key购买 nike

我想写一个这样的函数,其中两个变量的 T 必须是相同的数据类型,但只要它们相同就可以是任何类型。

fun <T> doSomething(var1: T, var2: T) {}

当我写这个的时候,它会和任意两个变量一起工作,比如

doSomething(5, listOf<Thread>())

目前的假设是假设因为 int 和 list 不同,所以 T 现在被认为是 Any?

有什么办法可以实现吗?一位同事正在使用 Swift,它按他预期的方式工作,如果其中一项是不同类型,则无法编译。

我也尝试使用具体化的函数,但同样的问题。如果我在开始时明确添加具体化的类,它只会导致编译错误,它只是假设它是任何其他的。

例如

inline fun <reified T> doSomething(var1: T, var2: T) { }

doSomething(1,"2") <-- unwanted compile
doSomething<String>(1,"2") <-- Will not compile

但我不希望只有在该人记得在其上添加显式类型时该函数才能工作...

最佳答案

听起来您的同事可能正在添加关联的类型约束。 Kotlin 没有关联类型,但它可能类似于使用如下内容指定 Kotlin 函数:

fun <T> doSomething(var1: Comparable<T>, var2: Comparable<T>)

在 Kotlin 中,它会为原语强制执行相同的类型,例如 doSomething(3, 4)doSomething(4, "x") 将无法编译,因为参数不会同时实现相同类型的 Comparable。

如果还需要处理集合,可以重载函数:

fun <T> doSomething(var1: Iterable<Comparable<T>>, var2: Iterable<Comparable<T>>)

这可能涵盖了您在评论中描述的大部分用例。

关于kotlin - 对于强制相同类型的 2 个参数的通用类型 T 有什么方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60174767/

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