Records em Java
Declare um tipo de dados compacto com record e leia os componentes. Em Card.java, mantenha record Tag(String name) {} package-private, mantenha a classe pública Card, construa Tag t = new Tag("oak"); e imprima t.name(). Compile com javac Card.java e execute java Card. A tela deve mostrar oak. Uma segunda demo adiciona componente int para a tela mostrar oak, depois 3. Deixe JUnit opcional para a página seguinte. Esta lição é record com accessors, não pipeline Streams e não caminhada Lambda forEach.
Um componente, um accessor
Abra Card.java. Mantenha o nome de classe pública Card. Apague demos streams Pipe sobrando, impressões lambda Cue sobrando, listas Generics Bin sobrando e prompts Scanner Box se enterrarem a história dos records. O programa não deve esperar digitação e não deve iniciar pipeline stream.
Acima da classe pública, declare o record:
record Tag(String name) {}
Dentro de Card.main, construa uma instância e imprima o accessor:
Tag t = new Tag("oak");
System.out.println(t.name());
O cabeçalho do record lista componentes entre parênteses. O Java gera o construtor e o accessor name() para esse componente. A tela mostra oak.
record Tag(String name) {}
public class Card {
public static void main(String[] args) {
Tag t = new Tag("oak");
System.out.println(t.name());
}
}
Na pasta que contém Card.java, execute javac Card.java. Quando chaves e parênteses batem, javac não escreve linha própria. Depois execute java Card — não java Card.java e não java Tag. Mantenha uma classe pública para o nome de execução bater com Card. O record Tag fica package-private no mesmo arquivo.
Percorra a execução uma vez. O Java começa em Card.main. new Tag("oak") guarda o componente. t.name() devolve "oak". println escreve oak. Nada chama stream(). Nada chama forEach. Nada lê args[0].
Diga a regra de iniciante enquanto olha a tela: record nomeia o tipo e os componentes; o accessor combina com o nome do componente; construa com new. Não invente demos JUnit nesta página. JUnit espera a lição opcional seguinte. Não troque o record por classe longa escrita na mão cheia de getters no arquivo de ensino — mantenha o cabeçalho record.
Se ainda vir OAK depois PINE de arquivo streams Pipe sobrando, mude para Card e mantenha t.name(). Se javac reclamar de dois tipos públicos, mantenha só Card pública e deixe record Tag sem public.
Dois componentes, duas impressões
Mantenha a mesma classe pública Card. Expanda o record para dois componentes:
record Tag(String name, int n) {}
Tag t = new Tag("oak", 3);
System.out.println(t.name());
System.out.println(t.n());
Compile de novo com javac Card.java e execute java Card. A tela mostra oak, depois 3. Cada componente ganha accessor com o mesmo nome. A ordem no cabeçalho combina com os argumentos do construtor.
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());
}
}
Percorra a execução uma vez. name() devolve "oak". n() devolve 3. Mantenha as duas demos como duas formas de ensino. Primeiro prove um componente. Depois prove dois componentes. Ambas as formas compartilham record package-private ao lado de Card pública.
Se trocar argumentos do construtor, os valores caem nos componentes errados. Mantenha "oak" primeiro e 3 segundo no arquivo de ensino que guardar.
Hábitos record
Mantenha o cabeçalho compacto e os accessors juntos enquanto pratica.
📊 Hábitos record para Card
| Hábito | Forma | Checagem iniciante |
|---|---|---|
| Declarar | record Tag(String name) {} |
componentes no cabeçalho |
| Construir | new Tag("oak") |
argumentos seguem ordem dos componentes |
| Ler | t.name() |
nome do accessor combina com o componente |
| Dois campos | record Tag(String name, int n) {} |
cada componente tem accessor |
| Classe pública | public class Card |
execute com java Card, não java Tag |
Records não é Streams nem JUnit
Streams filtrou e mapeou valores de lista num pipeline. Records seguram conjunto fixo de componentes num tipo compacto. JUnit vai checar comportamento com testes numa página opcional depois. Não misture esses três papéis num único arquivo iniciante hoje.
oak aqui é valor de componente record devolvido por name(). Não é resultado de filter stream nem visita Lambda forEach sozinha. Quando arquivo Pipe sobrando ainda imprime palavras mapeadas em maiúsculas, deixe como histórico e mantenha a linha t.name() de Card.
Sem a palavra-chave record, o cabeçalho compacto desta página some. Sem argumentos de construtor alinhados, javac rejeita a chamada. Mantenha cabeçalho e linha new alinhados enquanto pratica cada demo. Mantenha anotações JUnit fora desta página até essa lição, mesmo se já viu título de teste em outro lugar do caminho opcional. Prefira forma record curta para a tela ficar ligada a name() e n() em cada leitura cuidadosa do arquivo de ensino.
Checagens da pasta antes de JUnit
Liste a pasta após compilação bem-sucedida. Você deve ver Card.java e Card.class juntos, e em geral Tag.class para o record. Edite o fonte, salve, execute javac Card.java, depois java Card. .class velho pode mostrar tela antiga de uma linha se pular compilação depois de adicionar n.
Se javac reclamar de classes públicas duplicadas, mantenha só Card pública. Se a tela mostrar Tag[oak] em vez de oak, você imprimiu o record inteiro — mantenha a impressão de ensino em t.name(). Se nada imprimir, confirme que main ainda chama println.
Não cole Pipe stream().map em Card. Não cole Cue forEach como substituto da história record. O trabalho records opcional é tipo compacto com accessors.
Antes de JUnit opcional
Você pode manter record Tag(String name) {}, construir new Tag("oak"), imprimir t.name() como oak, depois usar record Tag(String name, int n) {}, imprimir oak e 3. Compile com javac Card.java e execute java Card. A tabela separa declarar, construir e ler. A próxima página opcional é JUnit.
Mantenha as demos Card para par claro de records. Mantenha arquivos streams Pipe fora desta página ao praticar records. Mantenha arquivos lambda Cue fora desta página ao praticar records. Mantenha trabalho JUnit fora desta página até essa lição. Esses hábitos são o checkpoint antes de seguir. Quando a tela de um campo mostrar oak ou a de dois campos mostrar oak depois 3, Records fez o trabalho desta lição e você está pronto para JUnit se continuar o caminho opcional.
Última passagem na pasta: um Card público, record Tag package-private, argumentos de construtor alinhados, impressões de accessors, sem espera Scanner, sem pipeline stream obrigatório. Execute javac Card.java e java Card mais uma vez na demo aberta. Se a tela ainda mostrar oak ou oak depois 3, a forma Records está sólida e o curso pode seguir para JUnit opcional na página seguinte. Prefira um hábito record claro por leitura para cada passagem ensinar o mesmo mapa.
🧠 Teste Seu Conhecimento
Teste Seu Conhecimento
Desafie-se com este questionário interativo e veja o quão bem você entende o tópico
📝 Instruções
- Leia cada pergunta cuidadosamente
- Selecione a melhor resposta para cada pergunta
- Você pode refazer o quiz quantas vezes quiser
- Seu progresso será mostrado no topo