L'utilisation de méthodes Kotlin avec des classes de valeurs dans la signature de code Java est une technique de développement courante. Les classes de valeurs sont un type spécial dans Kotlin qui peut être utilisé pour stocker et transmettre des données, similaire aux types de données de base en Java. En utilisant les méthodes Kotlin avec des classes de valeurs dans le code Java, nous pouvons tirer pleinement parti du sucre syntaxique et des fonctionnalités de programmation fonctionnelle de Kotlin pour gérer les données de manière concise et élégante. Dans cet article, nous présenterons comment utiliser les méthodes Kotlin avec des classes de valeurs dans le code Java et explorerons leurs avantages et considérations. Que vous soyez développeur Java ou passionné de Kotlin, cet article vous apportera de précieuses connaissances et conseils.
J'ai une entité Kotlin comme celle-ci
value class entityid(val id: long) {}
Et quelques interfaces de service
interface service() { fun do(entityid: entityid) }
et sa mise en œuvre.
Mais quand j'utilise l'interface du code java comme ci-dessous
{ ... entityid id = new entityid(1l); service.do(id) // service is interface here }
Je reçois des erreurs de compilation. Mais c'est un comportement très compréhensible puisque le compilateur kotlin génère fun do(entityid: long)
à partir du code source.
D'accord, utilisons quelque chose comme service.do(1l)
.
Une autre question va se poser :
java: cannot find symbol symbol: method do(long)
Je suppose que c'est parce que l'interface ne change pas réellement lors de la compilation. J'ai trouvé un moyen - ajoutez value class
替换为 data class
但我会有 value class
.
Peut-être existe-t-il une solution à cette situation ?
Vous pouvez utiliser la surcharge long
的函数重载采用 value 类
的函数,并在后台调用原始函数。注意 @jvmname
上的 value 类
重载,这样 java 只会看到 long
.
Kotlin
@jvminline value class entityid(val id: long) class service { @jvmname("processentity") fun process(entityid: entityid) { } fun process(entityid: long) { process(entityid(entityid)) } }
Vous pouvez ensuite l'appeler depuis Java en utilisant le long
littéral :
service.process(42L);
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!