Carregando...

Generics em Java

Nomeie o tipo do elemento entre colchetes angulares ao montar uma lista. Em Bin.java, mantenha a classe pública Bin, importe java.util.ArrayList, crie ArrayList<String> names = new ArrayList<>();, acrescente "oak" e imprima names.get(0). Compile com javac Bin.java e execute java Bin. A tela deve mostrar oak. Uma segunda demo guarda o valor Integer 3 do mesmo modo. Deixe Lambda opcional para a página seguinte. Esta lição é sobre listas tipadas com generics, não sobre args de linha de comando e não sobre um mini projeto com Scanner.

Uma lista String com argumento de tipo

Abra Bin.java. Mantenha o nome da classe pública Bin. Apague demos restantes de Program Arguments Flag, prompts Scanner Box, impressões Compiling Build e histórico Collection Shelf se enterrarem a história dos generics. O programa não deve esperar digitação nem ler args.
Acrescente o import no topo:
import java.util.ArrayList;
Dentro de Bin.main, crie uma lista cujos elementos são String:
ArrayList<String> names = new ArrayList<>();
Os colchetes angulares após ArrayList guardam o argumento de tipo String. O <> vazio no lado do new é o diamond — Java preenche o mesmo tipo da esquerda. Depois guarde uma palavra e imprima pelo índice:
names.add("oak");
System.out.println(names.get(0));
get(0) devolve um String porque a lista foi declarada com String. A tela mostra oak.

Bin ArrayList String prints oak

java
import java.util.ArrayList;

public class Bin {
    public static void main(String[] args) {
        ArrayList<String> names = new ArrayList<>();
        names.add("oak");
        System.out.println(names.get(0));
    }
}

Na pasta que contém Bin.java, execute javac Bin.java. Quando chaves, colchetes e ponto e vírgula batem, javac não escreve linha própria. Depois execute java Bin — não java Bin.java. Mantenha uma classe pública para o nome corresponder a Bin.
Percorra a execução uma vez. Java começa em Bin.main. A lista é tipada para String. add guarda "oak". get(0) devolve essa palavra. println escreve oak. Nada imprime args[0] do Flag. Nada espera em item:. Nada imprime [oak, pine] a menos que ainda rode um arquivo Shelf antigo.
Diga a regra de iniciante olhando a tela: colchetes angulares nomeiam o tipo do elemento; diamond repete no new; get devolve esse tipo. Não invente demos Lambda nesta página. Lambda espera a próxima lição opcional. Não deixe a lista crua como ArrayList names sem argumento de tipo neste arquivo de ensino.
Se ainda vir oak com java Flag oak, eram argumentos de programa. Aqui oak é elemento de lista, e o comando de execução é só java Bin. Se javac não encontrar ArrayList, confira a linha de import.

Uma lista Integer com o mesmo hábito

Generics não servem só para palavras. Mantenha a mesma classe pública Bin. Monte uma lista de valores Integer:
ArrayList<Integer> nums = new ArrayList<>();
nums.add(3);
System.out.println(nums.get(0));
Compile de novo com javac Bin.java e execute java Bin. A tela mostra 3. O argumento de tipo é Integer porque ArrayList guarda objetos, e Integer é a forma objeto dos inteiros neste formato iniciante. O diamond ainda copia o tipo do lado esquerdo.

Bin ArrayList Integer prints 3

java
import java.util.ArrayList;

public class Bin {
    public static void main(String[] args) {
        ArrayList<Integer> nums = new ArrayList<>();
        nums.add(3);
        System.out.println(nums.get(0));
    }
}

Percorra a execução uma vez. A lista é tipada para Integer. add(3) guarda o valor. get(0) devolve-o. println escreve 3. Mantenha as duas demos como dois formatos de ensino. Primeiro prove uma lista String. Depois prove uma lista Integer. Ambos compartilham import, diamond, add e get(0).
Se escrever ArrayList<String> e depois add(3), javac rejeita a incompatibilidade. Se escrever ArrayList<Integer> e depois add("oak"), javac rejeita também. O argumento de tipo é um contrato sobre o que a lista guarda.

Hábitos de lista tipada

Mantenha argumento de tipo e diamond juntos enquanto pratica.

📊 Generics habits for Bin

Hábito Forma tipada Verificação iniciante
Declarar ArrayList<String> names colchetes angulares nomeiam o tipo do elemento
Criar new ArrayList<>() diamond copia o tipo da esquerda
Guardar String names.add("oak") valor combina com String
Guardar Integer nums.add(3) valor combina com Integer
Ler get(0) devolve o tipo de elemento declarado

Generics não é Flag nem Lambda

Program Arguments preenchia String[] args na linha de lançamento. Generics nomeiam o tipo de elemento da coleção que você monta no código. Lambda encurtará algumas formas de chamada numa página opcional depois. Não misture esses três papéis num único arquivo iniciante hoje.
oak em Bin é valor guardado na lista. oak depois de java Flag era argumento. Mesma grafia, papel diferente. Quando um arquivo Flag restante ainda exige palavras na linha de comando, deixe-o como histórico e execute java Bin sem palavras extras.
Sem argumento de tipo, lista crua perde o contrato claro que esta página ensina. Mantenha ArrayList<String> ou ArrayList<Integer> nas demos que conservar. Mantenha sintaxe Lambda fora desta página até essa lição.

Verificações da pasta antes de Lambda

Liste a pasta após compilação bem-sucedida. Você deve ver Bin.java e Bin.class juntos. Edite a fonte, salve, execute javac Bin.java, depois java Bin. Um .class antigo pode mostrar impressão velha se pular compile após editar.
Se javac reclamar de classes públicas duplicadas, mantenha só Bin pública. Se a tela mostrar [oak] em vez de oak, imprimiu a lista inteira em vez de get(0) — mantenha a impressão de ensino em get(0). Se nada imprimir, confirme que main ainda chama println.
Não cole laços de argumentos Flag em Bin. Não cole prompts Scanner Box em Bin. O trabalho opcional de generics são listas tipadas com tipo de elemento claro.

Antes de Lambda opcional

Você pode manter classe pública Bin, importar ArrayList, montar ArrayList<String> com diamond, acrescentar "oak", imprimir get(0) como oak, depois montar ArrayList<Integer>, acrescentar 3 e imprimir 3. Compile com javac Bin.java e execute java Bin. A tabela separa declarar, criar, guardar e ler. A próxima página opcional é Lambda.
Mantenha as demos Bin para um par de generics claro. Mantenha arquivos de argumentos Flag fora desta página ao praticar listas tipadas. Mantenha arquivos Mini Project Box fora desta página ao praticar listas tipadas. Mantenha trabalho Lambda fora desta página até essa lição. Esses hábitos são o checkpoint antes de seguir. Quando a demo String mostra oak ou a demo Integer mostra 3, Generics cumpriu o papel desta lição e você está pronto para Lambda se continuar o caminho opcional.
Última passagem pela pasta: um Bin público, import presente, argumentos de tipo em colchetes angulares, diamond no new, valores add compatíveis, impressão get(0), sem espera de Scanner, sem palavras de lançamento obrigatórias. Execute mais uma vez javac Bin.java e java Bin na demo aberta. Se a tela ainda mostrar oak ou 3, a forma Generics está sólida e o curso pode seguir para Lambda opcional na página seguinte. Prefira um hábito claro de lista tipada por leitura para que cada passagem ensine o mesmo mapa.

🧠 Teste Seu Conhecimento

Pronto para Começar

Teste Seu Conhecimento

Desafie-se com este questionário interativo e veja o quão bem você entende o tópico

❓
5
Perguntas
🎯
70%
Para Passar
♾️
∞
Tempo
🔄
∞
Tentativas

📝 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