Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

234
Vistas
¿Es legal usar `record` como nombre de variable aunque sea una palabra clave?

Esto fue una sorpresa: puedo declarar una variable con el record de nombre aunque ahora se haya convertido en una palabra clave. Echa un vistazo a esto:

 public class Main { static class Foo { void bar() { System.out.println("Foo.bar"); } } record R (int a) {} public static void main(String[] args) { Foo record = new Foo(); record.bar(); R r = new R(5); System.out.println(r); } }

Cuando se compila y ejecuta con Java 17, esto da:

 Foo.bar R[a=5]

Esperaba que esto diera como resultado un error, como es el caso cuando se intenta declarar una variable llamada class . Como conozco a los muchachos de Java, tienen mucho cuidado de no romper el código existente, por lo que creo que esta podría ser una elección deliberada.

(Ni siquiera puede declarar una variable llamada const porque esa const es una palabra clave en Java).

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Sí, esto es legal porque record no es una palabra clave reservada ; es solo una palabra clave contextual .

La especificación del lenguaje Java ha distinguido entre palabras clave contextuales (originalmente "palabras clave restringidas" y luego "identificadores restringidos") y palabras clave reservadas desde Java 9, debido a la introducción de varias palabras clave nuevas en esa versión. La justificación se da en JLS 9 ( §3.9 ):

Otras diez secuencias de caracteres son palabras clave restringidas: open , module , requires , transitive , exports , opens , to , uses , provides y with . Estas secuencias de caracteres se tokenizan como palabras clave únicamente cuando aparecen como terminales en las producciones ModuleDeclaration y ModuleDirective (§7.7). Se tokenizan como identificadores en cualquier otro lugar, por compatibilidad con programas escritos antes de Java SE 9.

Esencialmente, Foo record = new Foo(); tiene que ser legal en Java 17 porque lo era en versiones anteriores cuando record no era ningún tipo de palabra clave, y la compatibilidad con versiones anteriores es una prioridad muy alta para las nuevas versiones del lenguaje Java.

over 4 years ago · Santiago Trujillo Denunciar

0

Bien, mientras buscaba const en el JLS nuevamente, vi que record es una palabra clave contextual mientras que const es solo una palabra clave . Las palabras clave contextuales se analizan según el contexto, y cuando el analizador determina que no está mirando una declaración de registro, no se quejará.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda