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的伴随对象调用它