Question "Var" en java 10 et kotlin


Je sais que nous pouvons utiliser le mot clé "var" pour définir des variables dans Kotlin:

var foo = 3

La dernière mise à jour java (java 10) introduit également le type "var":

var bar = new int[]{1, 2, 3}; // int[] bar = {1, 2, 3}

Ma question est la suivante: quelle est la différence entre l'utilisation de "var" entre ces langues?


23
2018-03-29 02:58


origine


Réponses:


  1. Leur signification est très différente, même si la syntaxe dans le cas de base var x = ... finit par être le même:

    1. var dans Kotlin signifie "ceci est une variable mutable", et peut être utilisé à la fois quand le type est déduit et quand il est explicite: var x: String = ...;

    2. var en Java signifie "ceci est une variable avec le type déduit", et peut être utilisé à la fois pour mutable et final variables.

  2. var en Java ne peut être utilisé que pour les variables locales; var à Kotlin est également utilisé pour les propriétés.


27
2018-03-29 06:56



Selon le notes de version de Java 10, il indique:

Nous cherchons à améliorer l'expérience du développeur en réduisant la cérémonie   associé à l'écriture de code Java, tout en maintenant l'engagement de Java   à la sécurité de type statique, en permettant aux développeurs d'éliminer la   déclaration manifeste souvent inutile des types de variables locales. Ce   fonctionnalité permettrait, par exemple, des déclarations telles que:

var list = new ArrayList<String>(); // infers ArrayList<String>
var stream = list.stream(); // infers Stream<String>

Donc, fondamentalement, il doit s'adapter à la paresse des programmeurs; au lieu d'écrire List<String> list = new ArrayList<>();, vous pouvez maintenant omettre le List<String>, et le remplacer par var, permettant ainsi à Java de déduire quel type list is - il est capable de le faire parce que la variable est initialisée quand elle est définie. Notez que vous devrez déduire le type de list lors de l'initialisation (dans le cas ci-dessus, vous ajouteriez String à new ArrayList<String>();). Ainsi, Java conserve sa déclaration de type statique.

Quelle est la différence avec Kotlin?

Le type d'une variable dans Kotlin défini avec var est également déduit (mais peut aussi être explicite en cas de var foo: Int), et Kotlin est également un langage typé statiquement.


13
2018-03-29 03:20



  • var en Java 10 peut simplifier certaines déclarations comme ArrayList<String> et le type de flux.

  • var ne peut être utilisé que dans une méthode pour Java 10. Mais vous pouvez l'écrire n'importe où dans Kotlin

  • Et il n'y a pas val mot-clé dans Java 10 alors nous pourrions utiliser final var comme un val en Java 10.

(Je pense que nous savons tous que mutable et immuable par défaut, donc je ne les décrirai pas.)

var est considéré à la fois comme un type(JB Lexer) et un keyword(JB Grammar Psi) dans Intellij IDEA 2018.1+.

J'ai développé un plugin pour les indications de type Java 10 pour montrer son type (ressemble à Kotlin)


5
2018-03-29 10:15