对于具有两个参数的函数,我想指定仅两个完全相同的类的参数起作用,而不是超类的两个参数。以下是我尝试但由于我的意义而无法正常工作的示例,因为超类Any由编译器设置。
fun main()
{
val test1 : Test1 = Test1()
var x : Int = 5
var y : String = ""
test1.Test(x, y)
}
class Test1
{
fun <T>Test(x : T, y : T)
{
if(x is Any)
{
println("Any")
}
}
}
答案 0 :(得分:0)
x is Any
将始终为true,因为每个类都从Any
继承。您需要检查x
和y
的类是否相等-参见下文:
fun main()
{
val test1 = Test1()
var x : Int = 5
var y : Int = 10
test1.Test(x, y)
test1.Test(x, "asdf")
}
class Test1
{
fun <T: Any>Test(x: T, y: T)
{
if(x::class == y::class)
{
println("Class is same")
} else {
throw IllegalArgumentException("Classes for parameters are not the same - got ${x::class} and ${y::class}")
}
}
}
请注意,您必须使用T: Any
或该类为可空类,这将无法工作。