kotlin - 在 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
谁能指出如何克服这个问题?
解决方案
您可以编写一个扩展属性来提取成员字段“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)
}
推荐阅读
- javascript - 使用 selenium 抓取 javascript 内容
- java - 打包结构化 Spring 项目的最佳实践是什么?
- javascript - Angular7 应用无法在 Safari 浏览器中运行
- google-apps-script - 有什么办法可以让我向上搜索价值吗?
- javascript - 检查变量是否未定义的更好方法是什么?
- camera - 用户无法上传文件大小超过 4MB 的图像
- json - 反应原生如何迭代json数据并在组件中呈现
- c# - 使用 Linq 而不是嵌套的 foreach 循环来求和值
- javascript - 将联系表 7 值传递给 Wordpress 中的另一个表单
- docker - 如何将内容从一个 pod 推送到另一个 pod?