Comment Kotlin prendra val comme mot-clé de la classe Java
Dans Kotlin, ils sont introduits un mot val
- clé et il est interopérable avec Java (nous pouvons accéder aux fonctions et aux membres de Java, et vice versa).
En Java, il n'y a pas de mot val
- clé , si mon code ressemble à ceci en Java
class Myclass{
int val =10; //here val is variable name
}
Si je passe celui-ci à la classe Kotlin, comment ça se passe?
Selon la documentation , si votre identifiant Java est un mot-clé dans Kotlin, vous pouvez toujours l'utiliser dans Kotlin si vous l'enveloppez dans des backticks.
Par exemple, si vous avez ceci en Java:
public class JavaClass {
public static int val = 3;
}
Vous pouvez y accéder dans Kotlin de cette façon:
fun main(args: Array<String>) {
println(JavaClass.`val`) // prints 3
}
MODIFIER (v2):
Qu'en est-il de l'inversion de kotlin à java ici java est strictement typé lang, comment il considère le mot-clé kotlin val
Si votre identifiant Kotlin est un mot - clé Java , vous pouvez avoir des problèmes.
Pour les méthodes, l' @JvmName("other-name")
annotation peut être utilisée dans Kotlin pour remplacer le nom de la méthode.
Kotlin:
class KotlinClass {
@JvmName("otherName")
fun new() {
// ...
}
}
Java:
public static void main(String[] args) {
KotlinClass.otherName();
}
Mais pour les champs, AFAIK il n'y a pas de solution fournie par Kotlin ou Java.
Il vaut mieux ne pas utiliser de mots clés Kotlin, ni de mots clés Java dans vos programmes.
EDIT (v1): (a mal compris la deuxième question et a écrit en général sur la façon d'utiliser les champs Kotlin en Java)
Les propriétés Kotlin seront considérées comme des méthodes getter et setter en Java. Les propriétés déclarées avec val
n'auront qu'un getter. Si vous ajoutez @JvmField
à une propriété Kotlin, vous pouvez alors accéder à ce champ également de manière directe. ( val
sera définitive, comme prévu).
Kotlin:
class KotlinClass {
val a = 1
var b = 2
@JvmField val c = 3
@JvmField var d = 4
}
Java:
public static void main(String[] args) {
KotlinClass o = new KotlinClass();
o.getA(); // 1
// o.setA(1); // not exists
o.getB(); // 2
o.setB(1);
o.c; // 3
o.getC(); // 3
// o.c = 1; // compile error
// o.setC(1); // not exists
o.d; // 4
o.getD(); // 4
o.d; = 4
o.setD(1);
}