Kotlin中的泛型:如何访问伴侣对象

Vit*_*lii 1 generics kotlin

我有2个枚举

enum class Enum1{
    X1, X2, X3, X4;
    companion object {
        val default = X2
    }
}
enum class Enum2{
    Y1, Y2, Y3;
    companion object {
        val default = Y3
    }
}
Run Code Online (Sandbox Code Playgroud)

它们都有一个带default变量的伴随对象.

我有两个返回此值的方法

private fun printDefaultEnum1() : String{
    return Enum1.default.toString()
}

private fun printDefaultEnum2() : String{
    return Enum2.default.toString()
} 
Run Code Online (Sandbox Code Playgroud)

在Kotlin中是否可以优化此代码并且只有一个接受类型并打印相应值的通用方法?

Kis*_*kae 5

可以通过使用伴随对象可以实现接口的事实来实现此目的:

interface DefaultEnum<E : Enum<E>> {
    val default: E
}

fun genericPrint(e: DefaultEnum<*>): String = e.default.toString()
Run Code Online (Sandbox Code Playgroud)

然后可以使用以下内容:

companion object : DefaultEnum<Enum1> {
    override val default: Enum1 = X2
}

genericPrint(Enum1) // This calls it with the companion object of Enum1
Run Code Online (Sandbox Code Playgroud)