Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Generics Kotlin中的泛型:如何访问伴随对象_Generics_Kotlin - Fatal编程技术网

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

Generics Kotlin中的泛型:如何访问伴随对象,generics,kotlin,Generics,Kotlin,我有两个枚举 enum class Enum1{ X1, X2, X3, X4; companion object { val default = X2 } } enum class Enum2{ Y1, Y2, Y3; companion object { val default = Y3 } } 它们都有一个带有默认值变量的伴生对象 然后我有两个方法返回这个值 private fun printDefaultE

我有两个枚举

enum class Enum1{
    X1, X2, X3, X4;
    companion object {
        val default = X2
    }
}
enum class Enum2{
    Y1, Y2, Y3;
    companion object {
        val default = Y3
    }
}
它们都有一个带有
默认值
变量的伴生对象

然后我有两个方法返回这个值

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

private fun printDefaultEnum2() : String{
    return Enum2.default.toString()
} 
在Kotlin中是否可以优化此代码,并且只有一个接受类型并打印相应值的泛型方法

enum类Enum1{
enum class Enum1 {
    X1, X2, X3, X4;
    companion object {
        val default = X2
    }

    override fun toString(): String = default.toString()
}

enum class Enum2 {
    Y1, Y2, Y3;
    companion object {
        val default = Y3
    }

    override fun toString(): String = default.toString()
}

private fun genericPrint(any: Any) {
    println(any.toString())
}

fun main(args: Array<String>) {
    genericPrint(Enum1)
}
X1,X2,X3,X4; 伴星{ val默认值=X2 } 重写fun-toString():String=default.toString() } 枚举类Enum2{ Y1,Y2,Y3; 伴星{ val默认值=Y3 } 重写fun-toString():String=default.toString() } private fun genericPrint(任意:任意){ println(any.toString()) } 趣味主线(args:Array){ 通用打印(枚举1) }
或者,更简单地说:

enum class Enum1 {
    X1, X2, X3, X4;
    companion object {
        val default = X2
    }

    override fun toString(): String = default.toString()
}

enum class Enum2 {
    Y1, Y2, Y3;
    companion object {
        val default = Y3
    }

    override fun toString(): String = default.toString()
}

fun main(args: Array<String>) {
    println(Enum1.toString())
}
enum类Enum1{
X1,X2,X3,X4;
伴星{
val默认值=X2
}
重写fun-toString():String=default.toString()
}
枚举类Enum2{
Y1,Y2,Y3;
伴星{
val默认值=Y3
}
重写fun-toString():String=default.toString()
}
趣味主线(args:Array){
println(Enum1.toString())
}

通过使用伴随对象可以实现接口的事实,可以做到这一点:

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

fun genericPrint(e: DefaultEnum<*>): String = e.default.toString()
接口默认枚举{
val默认值:E
}
fun genericPrint(e:DefaultEnum):String=e.default.toString()
然后可按如下方式使用:

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

genericPrint(Enum1) // This calls it with the companion object of Enum1
伴生对象:DefaultEnum{
覆盖val默认值:Enum1=X2
}
genericPrint(Enum1)//这将使用Enum1的伴随对象调用它