Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

236
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!