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

614
Vistas
¿Cuál es la diferencia entre una Clase final y un Registro?

En palabras simples, ¿cuál es la diferencia entre una clase final y un registro en Java 17?

¿En qué caso debo usar un registro?

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

0

Record es una clase inmutable , es decir, todos sus campos son final . Los registros son implícitamente final , por lo tanto, al igual que el record de clase final regular, no se pueden extender .

Hay una serie de restricciones impuestas a los registros ( para más detalles, consulte JEP 395 ).

Al contrario de las clases normales :

  • está prohibido declarar campos de instancia explícitamente dentro de los registros ( y recordatorio: todos los campos son final , lo cual es una distinción muy impotente );
  • La cláusula extends no está permitida con registros , porque cada registro extiende implícitamente la clase abstracta Record ;
  • el registro no se puede declarar con ninguno de estos modificadores: abstract , sealed o non-sealed (como consecuencia de ser implícitamente final );
  • los registros no pueden declarar inicializadores de instancias ni métodos nativos .

Los registros están destinados a ser "portadores transparentes de datos inmutables" , como dice JEP 395 .

Están diseñados para ser concisos , el compilador generará el constructor predeterminado , getters , hashCode/equals y toString() para usted. De modo que dentro de un registro necesita declarar solo su lógica personalizada ( si la hay ) y la declaración del registro puede ser literalmente una sola línea .

Los récords difieren mucho de las clases finales regulares.

Además, además de las peculiaridades mencionadas anteriormente, se reimplementó el mecanismo de serialización/deserialización para los registros , para que la deserialización no pase por alto al constructor.

¿En qué caso debo usar un registro?

En resumen, si sus objetos deben tener estado o necesita extender una clase en particular, entonces no puede utilizar record en tal caso.

Por otro lado, si sus objetos solo contienen datos , no están destinados a ser modificados o heredados de otras clases, entonces podría ser un buen candidato para implementarse como un record .

over 4 years ago · Santiago Trujillo Denunciar

0

Una clase final es simplemente una que no se puede extender. Pero eso no impone otras restricciones a la clase; todavía puede tener campos mutables, encapsular completamente su estado, etc.

Un record es un portador transparente para una tupla determinada de componentes de estado y se requiere para exponer una API derivada de su descripción de estado. Por lo tanto, los registros están más restringidos, pero a cambio de estas restricciones, obtiene una gran comodidad (constructores, métodos de acceso, métodos de Object ), así como algunas promesas semánticas (p. ej., desempaquetar un registro con sus componentes de acceso y volver a empaquetar los resultados). con el constructor te da un objeto equals .)

Los récords también son clases final , pero esto es una parte muy pequeña de lo que significa ser un récord.

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