有没有办法像 JAVA Comparable 一样比较两个通用对象?

Jan*_*fer 4 kotlin

有没有办法像 JAVA Comparable一样比较两个对象?

val o1: Any
val o2: Any
Run Code Online (Sandbox Code Playgroud)

我知道它们是同一类并实现 JAVA Comparable。如果我将它们转换为 JAVA Comparable,我会收到警告,我应该使用 Kotlin Comparable,但 Kotlin 版本需要在编译时未知的 Type。我所需要的只是这样的:

val result = (o1 as Comparable).compareTo(o2)
Run Code Online (Sandbox Code Playgroud)

Ten*_*r04 5

您可以使用Comparable<Any>。它会抱怨未经检查的强制转换,您可以抑制它,因为您知道如果类型匹配,它是安全的。

val o1: Any = 2
val o2: Any = 4
if (o1 is Comparable<*> && o1::class == o2::class) {
    @Suppress("UNCHECKED_CAST")
    if (o1 as Comparable<Any> < o2) {
        println("it's less")
    }
}
Run Code Online (Sandbox Code Playgroud)