java kotlin var java-10

“Var” en java 10 y kotlin



java variables (3)

Sé que podemos usar la palabra clave "var" para definir variables en Kotlin:

var foo = 3

La última actualización de java (java 10) también introduce el tipo "var":

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

Mi pregunta es, ¿cuál es la diferencia entre el uso de “var” entre estos idiomas?


  1. Su significado es muy diferente, incluso si la sintaxis en el caso básico var x = ... termina siendo la misma:

    1. var en Kotlin significa "esta es una variable mutable", y puede usarse tanto cuando se infiere el tipo como cuando es explícito: var x: String = ... ;

    2. var en Java significa "esta es una variable con tipo inferido", y puede usarse tanto para variables mutables como para variables final .

  2. var en Java solo se puede utilizar para variables locales; var en Kotlin se utiliza para las propiedades también.


Según las notas de la versión de Java 10, dice:

Buscamos mejorar la experiencia del desarrollador al reducir la ceremonia asociada con la escritura de código Java, al tiempo que mantenemos el compromiso de Java con la seguridad de tipo estático, al permitir que los desarrolladores elijan la declaración manifiesta, a menudo innecesaria, de tipos de variables locales. Esta característica permitiría, por ejemplo, declaraciones como:

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

Así que básicamente, es para acomodar la pereza de los programadores; en lugar de escribir List<String> list = new ArrayList<>(); , ahora puede omitir la List<String> y reemplazarla con var , lo que permite a Java deducir qué tipo de list es: puede hacer esto porque la variable se inicializa cuando se define. Tenga en cuenta que tendrá que inferir el tipo de la list al inicializar (en el caso anterior, agregaría String a la new ArrayList<String>(); ). Por lo tanto, Java aún mantiene su declaración de tipo estático.

¿Cuál es la diferencia con Kotlin?

El tipo de una variable en Kotlin definida con var también se infiere (pero también puede ser explícito en el caso de var foo: Int ), y Kotlin también es un lenguaje tipificado estáticamente.


  • var en Java 10 puede simplificar algunas declaraciones como ArrayList<String> y el tipo de secuencia.

  • var solo se puede utilizar en un método para Java 10. Pero puedes escribirlo en cualquier lugar en Kotlin

  • Y no hay una palabra clave val en Java 10, entonces podríamos usar final var como val en Java 10.

(Creo que todos sabemos que es mutable e inmutable por defecto, así que no los describiré).

var se considera tanto un type (JB Lexer) como una keyword (JB Grammar Psi) en Intellij IDEA 2018.1+.

He desarrollado un complemento para Java 10 var type hints para mostrar su tipo (solo se parece a Kotlin)