- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我想从 HOCON (Typesafe Config) 文件中将以下配置读入 Kotlin。
tablename: {
columns: [
{ item: { type: integer, key: true, null: false } }
{ desc: { type: varchar, length: 64 } }
{ quantity: { type: integer, null: false } }
{ price: { type: decimal, precision: 14, scale: 3 } }
]
}
事实上,我想提取关键列。到目前为止,我已经尝试了以下方法。
val metadata = ConfigFactory.parseFile(metafile)
val keys = metadata.getObjectList("${tablename.toLowerCase()}.columns")
.filter { it.unwrapped().values.first().get("key") == true }
但它失败并出现以下错误。
Unresolved reference. None of the following candidates is applicable because of receiver type mismatch:
@kotlin.internal.InlineOnly public operator inline fun <@kotlin.internal.OnlyInputTypes K, V> kotlin.collections.Map<out kotlin.String, ???>.get(key: kotlin.String): ??? defined in kotlin.collections
很明显,Kotlin 无法理解 Map 中“值”字段的数据类型。如何声明或让 Kotlin 知道?
也不是说这个 Map 中有不同的类型和可选的键。
PS:我知道有几个可用于 Kotlin 的包装器,例如 Konfig 和 Klutter。我希望如果这很容易编写,我可以避免使用另一个库。
更新 1:
我已经尝试了以下方法。
it.unwrapped().values.first().get<String, Boolean>("key")
得到以下编译器错误。
Unresolved reference. None of the following candidates is applicable because of receiver type mismatch:
@kotlin.internal.InlineOnly public operator inline fun <@kotlin.internal.OnlyInputTypes K, V> kotlin.collections.Map<out kotlin.String, kotlin.Boolean>.get(key: kotlin.String): kotlin.Boolean? defined in kotlin.collections
还有这个
it.unwrapped().values.first().get<String, Boolean?>("key")
有输出
Unresolved reference. None of the following candidates is applicable because of receiver type mismatch:
@kotlin.internal.InlineOnly public operator inline fun <@kotlin.internal.OnlyInputTypes K, V> kotlin.collections.Map<out kotlin.String, kotlin.Boolean?>.get(key: kotlin.String): kotlin.Boolean? defined in kotlin.collections
更新 2:
看看其他地方的处理方式,我想我可能需要使用反射。在我有限的曝光范围内尝试一下。到目前为止没有运气。
最佳答案
考虑您的代码,解构如下:
val keys = metadata.getObjectList("tablename.columns")
.filter {
val item:ConfigObject = it
val unwrapped:Map<String,Any?> = item.unwrapped()
val values:Collection<Any?> = unwrapped.values
val firstValue:Any? = values.first()
firstValue.get("key") == true // does not compile
}
从上面看问题应该很明显了。您需要使用 firstValue
包含 Map
的信息来帮助编译器,如下所示:
val firstValueMap = firstValue as Map<String,Any?>
firstValueMap["key"] == true
关于kotlin - 在 Kotlin 中读取和处理 HOCON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37092808/
我正在使用 HOCON 配置日志消息,并且正在寻找一种动态替换占位符值的方法。 我知道 ${?PLACEHOLDER} 将读取环境变量并在 PLACEHOLDER 环境变量不存在时返回一个空字符串。
假设我有这样的配置: root { value1: 1 value2: 2 values { dynamic1 { static1: 10 sta
我在 SBT 下有多模块项目。 项目 A (图书馆)有reference.conf带有 A 的文件的配置参数。项目 A取决于 akka-actor库,它自带 reference.conf文件。项目 A
我正在使用类型安全配置,并且我正在寻找一种简单的方法来允许可选覆盖应用程序之间共享的配置文件中的属性。 假设我有 2 个应用程序,A 和 B。它们都使用模块 Z。它们都加载共享配置文件“shared.
在 Scala 研究应用程序中,我使用 PureConfig 的 ConfigSource.file() 方法加载一个 hocon 文件,该方法表示研究实验的默认配置。我用它来动态构建一批变体。在进行
我怎样才能结合application.con用于 lightben/typesafe 配置的 HOCON 格式文件 https://github.com/lightbend/config使用 grad
我已经设置了一个 Akka.Net 节点作为集群中的种子节点,我称之为前端,另一个节点我称之为后端。在前端节点中,我在代码中配置了一个集群路由器组,这使我可以将消息从前端发送到任何以“后端”角色加入(
我想从 HOCON (Typesafe Config) 文件中将以下配置读入 Kotlin。 tablename: { columns: [ { item: { type: intege
我有一个从 JSON 文件创建的 hocon 配置。我需要解析以下 hocon 并提取值 示例 hocon 文件:示例.json nodes=[ { host=myho
尚未找到缩进/自动套用格式的方法 HOCON配置文件。你在哪儿? 最佳答案 我相当确定 HOCON 没有 Emacs 主要模式。但它看起来与 JavaScript 类似,因此您可以通过将其添加到 .e
我有一个此处提到的配置 map-config{ key1 : [ list1, list2, list3 ], key2 : [ list4, list5 ],
我的一个网络服务返回以下 Java 字符串: [ { id=5d93532e77490b00013d8862, app=null, manufacturer=pearson
在 application.conf ,如果所述环境变量为空,我如何使用环境变量来设置值或默认值? 最佳答案 my.value="default" my.value=${?SOME_ENV_VARIA
我正在学习 akka.net 并可能会用它来替换我们传统的消息驱动应用程序的一部分。 基本上,我正在尝试让X 个节点加入集群。它是点对点类型,我可能会在一个节点上运行 X 数量的参与者(同一参与者)。
我正在尝试使用 Hocon 格式在 Vertx 中进行配置。我还为它添加了 maven 依赖项。 com.typesafe config
我想将 .conf 文件直接转换为 json,以便我可以将其传递给前端。有没有办法在 scala/play 中做到这一点?我现在走的路似乎非常麻烦: val conf: Configuration =
我想使用自动化来创建带有 python 3 脚本的 hocon 配置。我读到 lightbend ( https://github.com/lightbend/config ) 推荐 pyhocon
我是一名优秀的程序员,十分优秀!