Comment Kotlin prendra val comme mot-clé de la classe Java


Balaraju M:

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?

juzraai:

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 valn'auront qu'un getter. Si vous ajoutez @JvmFieldà une propriété Kotlin, vous pouvez alors accéder à ce champ également de manière directe. ( valsera 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);
}

Articles connexes


Comment appeler la clé de classe Kotlin en Java?

Ours de vacances Nous créons le module Dagger pour fournir la classe comme suit, mais nous rencontrons le problème. CustomHelperest classe * de .kt, si nous utilisons CustomHelper::classdans @ClassKey, il ne sera pas reconnu en Java et obtenir erreur de syntax

Comment utiliser une chaîne comme argument de mot clé?

Issac Kelly: Plus précisément, j'essaie d'utiliser une chaîne pour filtrer arbitrairement l'ORM. J'ai essayé des solutions exécutives et d'évaluation, mais je me heurte à des murs. Le code ci-dessous ne fonctionne pas, mais c'est le meilleur moyen pour moi d'e

Utilisation de ce mot clé comme verrou dans la concurrence

Derek Xie: Dans le programme suivant, les mots clés this dans la classe LoggerThread font-ils référence à l'objet LoggerThread ou à l'objet LogService? Logiquement, il devrait se référer à LogService pour que la synchronisation fonctionne, mais sémantiquement,