Die Verwendung von Kotlin-Methoden mit Wertklassen beim Signieren von Java-Code ist eine gängige Entwicklungstechnik. Eine Wertklasse ist ein spezieller Typ in Kotlin, der zum Speichern und Übergeben von Daten verwendet werden kann, ähnlich den grundlegenden Datentypen in Java. Durch die Verwendung von Kotlin-Methoden mit Wertklassen im Java-Code können wir die syntaktischen Zucker- und funktionalen Programmierfunktionen von Kotlin voll ausnutzen, um Daten auf prägnante und elegante Weise zu verarbeiten. In diesem Artikel stellen wir die Verwendung von Kotlin-Methoden mit Wertklassen in Java-Code vor und untersuchen deren Vorteile und Überlegungen. Ganz gleich, ob Sie ein Java-Entwickler oder ein Kotlin-Enthusiast sind, dieser Artikel vermittelt Ihnen wertvolles Wissen und Tipps.
Ich habe eine Kotlin-Entität wie diese
value class entityid(val id: long) {}
Und einige Serviceschnittstellen
interface service() { fun do(entityid: entityid) }
und seine Umsetzung.
Aber wenn ich eine Schnittstelle aus Java-Code wie unten verwende
{ ... entityid id = new entityid(1l); service.do(id) // service is interface here }
Ich erhalte Kompilierungsfehler. Dies ist jedoch ein sehr verständliches Verhalten, da der Kotlin-Compiler fun do(entityid: long)
aus dem Quellcode generiert.
Okay, verwenden wir etwas wie service.do(1l)
.
Es stellt sich noch eine weitere Frage:
java: cannot find symbol symbol: method do(long)
Ich vermute, das liegt daran, dass sich die Schnittstelle während der Kompilierung nicht wirklich ändert. Ich habe einen Weg gefunden – füge value class
替换为 data class
但我会有 value class
hinzu.
Gibt es vielleicht eine Lösung für diese Situation?
Sie können die long
的函数重载采用 value 类
的函数,并在后台调用原始函数。注意 @jvmname
上的 value 类
重载,这样 java 只会看到 long
-Überladung verwenden.
Kotlin
@jvminline value class entityid(val id: long) class service { @jvmname("processentity") fun process(entityid: entityid) { } fun process(entityid: long) { process(entityid(entityid)) } }
Sie können es dann von Java aus mit dem long
-Literal aufrufen:
service.process(42L);
Das obige ist der detaillierte Inhalt vonVerwendung von Kotlin-Methoden mit Wertklassen beim Signieren von Java-Code. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!