Kotlin 对于强制使用相同类型的2个参数,泛型类型T是否有任何方法?

Kotlin 对于强制使用相同类型的2个参数,泛型类型T是否有任何方法?,kotlin,Kotlin,我想写一个这样的函数,其中两个变量的T必须是相同的数据类型,但只要它们是相同的,就可以是任何东西 fun <T> doSomething(var1: T, var2: T) {} fun doSomething(var1:T,var2:T){ 当我写这篇文章时,它将处理任意两个变量,例如 doSomething(5, listOf<Thread>()) doSomething(5,listOf()) 当前的假设是,它假设由于int和list是不同的,所以T现在被认

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

fun <T> doSomething(var1: T, var2: T) {}
fun doSomething(var1:T,var2:T){
当我写这篇文章时,它将处理任意两个变量,例如

doSomething(5, listOf<Thread>())
doSomething(5,listOf())
当前的假设是,它假设由于int和list是不同的,所以T现在被认为是任意的

有什么办法可以让这一切顺利进行吗?一位同事正在使用Swift,它的工作方式与他预期的一样,如果其中任何一项是不同类型的,则无法编译

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

例如

inlinefundosomething(var1:T,var2:T){

doSomething(1,“2”)听起来可能是您的同事在添加相关的类型约束。Kotlin没有关联的类型,但它可能类似于使用以下内容指定Kotlin函数:

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

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

我不喜欢类似的方法,因为它不适用于所有类型。我认为这会奏效,尽管有奇怪的语法:

fun <T> doSomething(var1: T) = fun(var2: T) {
  println("Hello $var1 and $var2")
}

fun te() {
  doSomething(42)("Text") // Error
  doSomething(42)(78) // OK
}
fun doSomething(var1:T)=fun(var2:T){
println(“你好$var1和$var2”)
}
fun te(){
doSomething(42)(“文本”)//错误
doSomething(42)(78)//好的
}
您还可以轻松地扩展它:

fun <T> doSomething(var1: T) = fun(var2: T) = fun(var3: T) {
  println("Hello $var1 and $var2 and $var3")
}
fun doSomething(var1:T)=fun(var2:T)=fun(var3:T){
println(“您好$var1和$var2和$var3”)
}

好问题,我不认为有什么解决方案,可能是一个
重新填充了任何
我认为这样类型就需要显式,而不是在函数体中指定泛型类型,如果在类声明中指定泛型类型,它不会解决您的问题吗?它的语法是什么,我找不到任何似乎可以编译的东西?这不会。。。这是一个密封类的伴生对象,我想我不能把它放在类上。。。无论如何编译的任何东西都不会强制同伴是同一类型扫描您是否添加了此功能的用例?通过这种方式,我们可以理解是否可以以不同的方式解决问题。如果这两个参数的类型相同,您将如何处理这两个参数?这非常适合我使用它的方式。非常感谢。这确实有效,但我真的不喜欢这种语法。。。如果需要的话,我可能会把它保留在那些没有实现可比性的项目上
fun <T> doSomething(var1: T) = fun(var2: T) {
  println("Hello $var1 and $var2")
}

fun te() {
  doSomething(42)("Text") // Error
  doSomething(42)(78) // OK
}
fun <T> doSomething(var1: T) = fun(var2: T) = fun(var3: T) {
  println("Hello $var1 and $var2 and $var3")
}