我有2个枚举
enum class Enum1{
X1, X2, X3, X4;
companion object {
val default = X2
}
}
enum class Enum2{
Y1, Y2, Y3;
companion object {
val default = Y3
}
}
他们两个都有一个带有default
变量的伴随对象。
我有两种方法可以返回该值
private fun printDefaultEnum1() : String{
return Enum1.default.toString()
}
private fun printDefaultEnum2() : String{
return Enum2.default.toString()
}
在Kotlin中是否可以优化此代码,并且只有一种接受类型并输出相应值的通用方法?
答案 0 :(得分:5)
可以通过以下事实做到这一点:伴随对象可以实现接口:
interface DefaultEnum<E : Enum<E>> {
val default: 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
答案 1 :(得分:-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()
}
private fun genericPrint(any: Any) {
println(any.toString())
}
fun main(args: Array<String>) {
genericPrint(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()
}
fun main(args: Array<String>) {
println(Enum1.toString())
}