首页 > 解决方案 > 在 Kotlin 中使用 Java 枚举时重载解析模糊

问题描述

我在 Kotlin 代码中使用 java 枚举 io.confluent.kafka.schemaregistry.avro.AvroCompatibilityLevel

public enum AvroCompatibilityLevel {
   NONE("NONE", AvroCompatibilityChecker.NO_OP_CHECKER),
   // ...

   public final String name;
   public final AvroCompatibilityChecker compatibilityChecker;

   // ...

在科特林我想利用

AvroCompatibilityLevel.NONE.name

但这会导致

Overload resolution ambiguity. All these functions match:

public final val name: String? // coming from the field name

public final val name: String // coming from enum

谁能指出如何克服这个问题?

标签: kotlin

解决方案


您可以编写一个扩展属性来提取成员字段“name”的值,如下所示:

import kotlin.reflect.full.memberProperties

private val innerNameCache = mutableMapOf<AvroCompatibilityLevel, String>()
val AvroCompatibilityLevel.innerName: String
    get() = innerNameCache.getOrPut(this) {
        AvroCompatibilityLevel::class.memberProperties.filter { it.name == "name" }[0].get(this) as String
    }

fun main() {
    println(AvroCompatibilityLevel.NONE.innerName)
}

推荐阅读