Records en Java
Declaras un tipo de datos compacto con record y lees sus componentes. En Card.java mantienes un record Tag(String name) {} con visibilidad de paquete, mantienes la clase pública Card, creas Tag t = new Tag("oak"); e imprimes t.name(). Compila con javac Card.java y ejecuta java Card. La pantalla debería mostrar oak. Una segunda demo añade un componente int para que la pantalla muestre oak, luego 3. Deja JUnit opcional para la página siguiente. Esta lección es un record con accesores, no una tubería Streams ni un recorrido Lambda forEach.
Un componente, un acceso
Abre Card.java. Mantén el nombre de clase pública Card. Borra demos sobrantes de tubería Pipe streams, impresiones lambda Cue sobrantes, listas generics Bin sobrantes y avisos Scanner de Box sobrantes si entierran la historia de Records. El programa no debe esperar tecleo ni iniciar una tubería stream.
Encima de la clase pública declaras el record:
record Tag(String name) {}
Dentro de Card.main creas una instancia e imprimes el acceso:
Tag t = new Tag("oak");
System.out.println(t.name());
La cabecera del record lista componentes entre paréntesis. Java genera el constructor y el acceso name() para ese componente. La pantalla muestra oak.
record Tag(String name) {}
public class Card {
public static void main(String[] args) {
Tag t = new Tag("oak");
System.out.println(t.name());
}
}
Desde la carpeta que contiene Card.java ejecuta javac Card.java. Cuando llaves y paréntesis coinciden, javac no escribe una línea propia. Luego ejecuta java Card — no java Card.java ni java Tag. Mantén una sola clase pública para que el nombre de ejecución coincida con Card. El record Tag queda con visibilidad de paquete en el mismo archivo.
Recorre la ejecución una vez. Java empieza en Card.main. new Tag("oak") guarda el componente. t.name() devuelve "oak". println escribe oak. Nada llama a stream(). Nada llama a forEach. Nada lee args[0].
Di la regla del principiante mientras miras la pantalla: record nombra el tipo y sus componentes; el acceso coincide con el nombre del componente; construye con new. No inventes demos JUnit en esta página. JUnit espera la lección opcional siguiente. No sustituyas el record por una clase larga escrita a mano llena de getters en el archivo de enseñanza — conserva la cabecera record.
Si aún ves OAK y luego PINE de un archivo Pipe streams sobrante, cambia a Card y conserva t.name(). Si javac se queja de dos tipos públicos, deja solo Card pública y el record Tag sin public.
Dos componentes, dos impresiones
Mantén la misma clase pública Card. Expande el record a dos componentes:
record Tag(String name, int n) {}
Tag t = new Tag("oak", 3);
System.out.println(t.name());
System.out.println(t.n());
Compila otra vez con javac Card.java y ejecuta java Card. La pantalla muestra oak, luego 3. Cada componente obtiene un acceso con el mismo nombre. El orden en la cabecera coincide con los argumentos del constructor.
record Tag(String name, int n) {}
public class Card {
public static void main(String[] args) {
Tag t = new Tag("oak", 3);
System.out.println(t.name());
System.out.println(t.n());
}
}
Recorre la ejecución una vez. name() devuelve "oak". n() devuelve 3. Conserva las dos demos como dos formas de enseñanza. Primero demuestras un componente. Luego demuestras dos componentes. Ambas formas comparten un record con visibilidad de paquete junto a Card pública.
Si intercambias argumentos del constructor, los valores caen en componentes equivocados. Conserva "oak" primero y 3 segundo en el archivo de enseñanza que mantienes.
Hábitos de record
Mantén la cabecera compacta y los accesores juntos mientras practicas.
📊 Hábitos de record para Card
| Hábito | Forma | Comprobación del principiante |
|---|---|---|
| Declarar | record Tag(String name) {} |
los componentes van en la cabecera |
| Construir | new Tag("oak") |
los argumentos coinciden con el orden de componentes |
| Leer | t.name() |
el nombre del acceso coincide con el componente |
| Dos campos | record Tag(String name, int n) {} |
cada componente tiene su acceso |
| Clase pública | public class Card |
ejecuta con java Card, no java Tag |
Records no es Streams ni JUnit
Streams filtraron y mapearon valores de lista por una tubería. Records guardan un conjunto fijo de componentes en un tipo compacto. JUnit comprobará el comportamiento con pruebas en una página opcional posterior. No mezcles hoy esas tres tareas en un solo archivo de principiante.
oak aquí es un valor de componente record devuelto por name(). No es un resultado de filtro stream ni una visita Lambda forEach sola. Cuando un archivo Pipe sobrante aún imprime palabras map en mayúsculas, déjalo como historia y conserva la línea t.name() de Card.
Sin la palabra clave record, desaparece la cabecera compacta de esta página. Sin argumentos de constructor coincidentes, javac rechaza la llamada. Mantén alineadas la cabecera y la línea new mientras practicas cada demo. Mantén anotaciones JUnit fuera de esta página hasta esa lección, aunque ya hayas visto un titular de pruebas en otra parte del camino opcional. Prefiere la forma record corta para que la pantalla siga ligada a name() y n() en cada lectura cuidadosa del archivo de enseñanza.
Comprobaciones de carpeta antes de JUnit
Lista la carpeta tras compilar con éxito. Deberías ver Card.java y Card.class juntos, y normalmente Tag.class para el record. Edita el origen, guarda, ejecuta javac Card.java y luego java Card. Un .class obsoleto puede mostrar una pantalla antigua de una línea si omites compilar tras añadir n.
Si javac se queja de clases públicas duplicadas, deja solo Card pública. Si la pantalla muestra Tag[oak] en lugar de oak, imprimiste todo el record — conserva la impresión de enseñanza como t.name(). Si no imprime nada, confirma que main sigue llamando a println.
No pegues stream().map de Pipe en Card. No pegues forEach de Cue como reemplazo de la historia del record. El trabajo opcional de Records es un tipo compacto con accesores.
Antes de JUnit opcional
Puedes mantener record Tag(String name) {}, crear new Tag("oak"), imprimir t.name() como oak, luego usar record Tag(String name, int n) {}, imprimir oak y 3. Compila con javac Card.java y ejecuta java Card. La tabla separa declarar, construir y leer. La página opcional siguiente es JUnit.
Conserva las demos Card para un par de records claro. Mantén archivos Pipe streams fuera de esta página cuando practiques Records. Mantén archivos lambda Cue fuera de esta página cuando practiques Records. Mantén trabajo JUnit fuera de esta página hasta esa lección. Esos hábitos son el punto de control antes de seguir. Cuando la pantalla de un campo muestra oak o la de dos campos muestra oak luego 3, Records cumplió su papel en esta lección y estás listo para JUnit si continúas el camino opcional.
Un último repaso de la carpeta: una Card pública, record Tag con visibilidad de paquete, argumentos de constructor coincidentes, impresiones de accesores, sin espera Scanner, sin tubería stream obligatoria. Ejecuta javac Card.java y java Card una vez más en la demo que tienes abierta. Si la pantalla sigue mostrando oak o oak luego 3, la forma Records es sólida y el curso puede pasar a JUnit opcional en la página siguiente. Prefiere un hábito de record claro por lectura para que cada pasada enseñe el mismo mapa.
🧠 Pon a Prueba tu Conocimiento
Pon a Prueba tu Conocimiento
Ponte a prueba con este cuestionario interactivo y descubre qué tan bien entiendes el tema
📝 Instrucciones
- Lee cada pregunta cuidadosamente
- Selecciona la mejor respuesta para cada pregunta
- Puedes repetir el quiz tantas veces como quieras
- Tu progreso se mostrará en la parte superior