Kotlin:仅允许泛型使用同一类的参数

时间:2020-06-11 11:02:19

标签: kotlin generics

对于具有两个参数的函数,我想指定仅两个完全相同的类的参数起作用,而不是超类的两个参数。以下是我尝试但由于我的意义而无法正常工作的示例,因为超类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")
        }
    }
}

1 个答案:

答案 0 :(得分:0)

x is Any将始终为true,因为每个类都从Any继承。您需要检查xy的类是否相等-参见下文:

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或该类为可空类,这将无法工作。

相关问题