Ich möchte die folgende Konfiguration aus einer HOCON (Typesafe Config) -Datei in Kotlin lesen.HOCON in Kotlin lesen und verarbeiten
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 } }
]
}
In der Tat möchte ich die Schlüssel Spalte (n) extrahieren. Ich habe bisher folgendes versucht.
val metadata = ConfigFactory.parseFile(metafile)
val keys = metadata.getObjectList("${tablename.toLowerCase()}.columns")
.filter { it.unwrapped().values.first().get("key") == true }
Aber es schlägt mit dem folgenden Fehler fehl.
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
Es ist klar, dass Kotlin nicht in der Lage ist, den Datentyp des „Wert“ Feld in der Map zu verstehen. Wie erkläre ich es oder lass es Kotlin wissen?
Auch nicht, dass es verschiedene Arten und optionale Schlüssel in dieser Karte gibt.
PS: Ich weiß, dass es für Kotlin einige Wrapper wie Konfig und Klutter gibt. Ich hatte gehofft, dass wenn ich leicht schreiben kann, ich eine andere Bibliothek meiden könnte.
UPDATE 1:
Ich habe folgendes versucht.
, um den folgenden Compiler-Fehler zu erhalten.
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
Und das
it.unwrapped().values.first().get<String, Boolean?>("key")
mit Ausgang
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
UPDATE 2:
auf dem Weg der Suche es an anderer Stelle behandelt wird, ich denke, ich muss wahrscheinlich verwenden Betrachtung. Probieren Sie es mit meiner begrenzten Belichtung aus. Bisher kein Glück.
Ich brauche wahrscheinlich nicht das Config-Objekt auszupacken. Aber so zu handeln, wie es war, brachte keine Ergebnisse, und das war das nächste, was ich dazu bringen konnte, etwas "zu drucken". –