From ecb32fe8aa6d8c3abb22dd39a9aea6edd1c60a78 Mon Sep 17 00:00:00 2001 From: Alex Araujo Date: Thu, 21 Aug 2025 21:52:13 -0300 Subject: [PATCH 1/2] aula generics --- .idea/.gitignore | 3 ++ .idea/markdown.xml | 8 ++++ .idea/misc.xml | 6 +++ .idea/modules.xml | 8 ++++ .idea/vcs.xml | 6 +++ src/Main.java | 54 ++++++++++++++++-------- src/exemplo/conversor/Conversor.java | 33 +++++++++++++++ src/exemplo/imposto/Dedutivel.java | 4 -- src/exemplo/imposto/ICMS.java | 15 ------- src/exemplo/imposto/IOF.java | 13 ------ src/exemplo/imposto/IVA.java | 4 -- src/exemplo/imposto/Imposto.java | 18 -------- src/exemplo/imposto/ImpostoAbstract.java | 11 ----- src/exemplo/imposto/ImpostoRecord.java | 4 -- 14 files changed, 101 insertions(+), 86 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/markdown.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 src/exemplo/conversor/Conversor.java delete mode 100644 src/exemplo/imposto/Dedutivel.java delete mode 100644 src/exemplo/imposto/ICMS.java delete mode 100644 src/exemplo/imposto/IOF.java delete mode 100644 src/exemplo/imposto/IVA.java delete mode 100644 src/exemplo/imposto/Imposto.java delete mode 100644 src/exemplo/imposto/ImpostoAbstract.java delete mode 100644 src/exemplo/imposto/ImpostoRecord.java diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/markdown.xml b/.idea/markdown.xml new file mode 100644 index 0000000..c61ea33 --- /dev/null +++ b/.idea/markdown.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..6f29fee --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..813b4da --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/Main.java b/src/Main.java index b0687c5..986ce52 100644 --- a/src/Main.java +++ b/src/Main.java @@ -1,34 +1,54 @@ -import exemplo.imposto.ICMS; -import exemplo.imposto.IOF; -import exemplo.imposto.Imposto; -import exemplo.imposto.ImpostoRecord; +import exemplo.conversor.Conversor; +import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { + Object variavel = "AAAA"; - //Perecivel produto = new Produto(); - //processar(produto); + //convertForInteger(variavel); + //convertForBoolean(variavel); - //ICMS, IOF + Conversor booleanConversor = new Conversor<>(true); + //booleanConversor.convertGeneric(); - Imposto IOF = new IOF(1.5D); - Imposto ICMS = new ICMS(2.7D); + Conversor integerConversor = new Conversor<>(100); + //integerConversor.convertGeneric(); - //new IVA(27D); + List numerosInteiros = List.of(1,2,3,4,5); + List numeros = List.of(1,2,3,4,5); - //calcular(IOF); - calcular(ICMS); - //calcular(IVA); + integerConversor.imprimeListaWildCardGenerico(numeros); + integerConversor.imprimeListaWildCardGenerico(numerosInteiros); - ImpostoRecord iva = new ImpostoRecord("2", "IVA"); - //iva.taxa(); + integerConversor.imprimeListaWildCardSuper(numeros); + //integerConversor.imprimeListaWildCardSuper(numerosInteiros); NAO ACEITA O PARAMENTRO + + integerConversor.imprimeListaWildCardExtends(numerosInteiros); + integerConversor.imprimeListaWildCardExtends(numeros); + + +// E - Element (usado exclusivamente pelo Java Collections Framework) +// K - Key +// N - Number +// T - Type +// V - Value +// S,U,V etc. - 2nd, 3rd, 4th types } - public static void calcular(Imposto imposto) { - imposto.imprimir(); + + + public static void convertForInteger(Object param) { + Integer num = (Integer) param; + System.out.printf("Parametro eh %d", num); + } + + public static void convertForBoolean(Object param) { + Boolean num = (Boolean) param; + System.out.printf("Parametro eh %b", num); } + } \ No newline at end of file diff --git a/src/exemplo/conversor/Conversor.java b/src/exemplo/conversor/Conversor.java new file mode 100644 index 0000000..02e3e2d --- /dev/null +++ b/src/exemplo/conversor/Conversor.java @@ -0,0 +1,33 @@ +package exemplo.conversor; + +import java.util.List; + +public class Conversor { + + private T t; + + public Conversor(T t) { + this.t = t; + } + + public void convertGeneric() { + System.out.println("Parametro eh " + t); + } + + public void imprimeLista(List lista) { + lista.forEach(System.out::println); + } + + public void imprimeListaWildCardGenerico(List lista) { + lista.forEach(System.out::println); + } + + public void imprimeListaWildCardSuper(List lista) { + lista.forEach(System.out::println); + } + + public void imprimeListaWildCardExtends(List lista) { + lista.forEach(System.out::println); + } + +} diff --git a/src/exemplo/imposto/Dedutivel.java b/src/exemplo/imposto/Dedutivel.java deleted file mode 100644 index b797665..0000000 --- a/src/exemplo/imposto/Dedutivel.java +++ /dev/null @@ -1,4 +0,0 @@ -package exemplo.imposto; - -public interface Dedutivel { -} diff --git a/src/exemplo/imposto/ICMS.java b/src/exemplo/imposto/ICMS.java deleted file mode 100644 index 32970e2..0000000 --- a/src/exemplo/imposto/ICMS.java +++ /dev/null @@ -1,15 +0,0 @@ -package exemplo.imposto; - -public class ICMS implements Imposto { - - public Double taxa; - public ICMS(Double taxa){ - this.taxa = taxa; - } - - @Override - public void calcular(){ - System.out.println("CALCULANDO ICMS"); - } - -} diff --git a/src/exemplo/imposto/IOF.java b/src/exemplo/imposto/IOF.java deleted file mode 100644 index a28db29..0000000 --- a/src/exemplo/imposto/IOF.java +++ /dev/null @@ -1,13 +0,0 @@ -package exemplo.imposto; - -public class IOF implements Imposto { - - public Double taxa; - public IOF(Double taxa){ - this.taxa = taxa; - } - - @Override - public void calcular(){} - -} diff --git a/src/exemplo/imposto/IVA.java b/src/exemplo/imposto/IVA.java deleted file mode 100644 index 3d5ad51..0000000 --- a/src/exemplo/imposto/IVA.java +++ /dev/null @@ -1,4 +0,0 @@ -package exemplo.imposto; - -public class IVA { -} diff --git a/src/exemplo/imposto/Imposto.java b/src/exemplo/imposto/Imposto.java deleted file mode 100644 index 740e602..0000000 --- a/src/exemplo/imposto/Imposto.java +++ /dev/null @@ -1,18 +0,0 @@ -package exemplo.imposto; - -public interface Imposto extends Dedutivel { - - static Double BASE_CALCULO = 10D; - - void calcular(); - - default void imprimir() { - System.out.println("Imposto"); - calcular(); - } - - default void imprimir2() { - System.out.println("Imposto"); - } - -} diff --git a/src/exemplo/imposto/ImpostoAbstract.java b/src/exemplo/imposto/ImpostoAbstract.java deleted file mode 100644 index 14e6e63..0000000 --- a/src/exemplo/imposto/ImpostoAbstract.java +++ /dev/null @@ -1,11 +0,0 @@ -package exemplo.imposto; - -public abstract class ImpostoAbstract { - - public abstract void calcular(); - - public void imprimir(){ - System.out.println("Imprimir"); - calcular(); - } -} diff --git a/src/exemplo/imposto/ImpostoRecord.java b/src/exemplo/imposto/ImpostoRecord.java deleted file mode 100644 index 9833083..0000000 --- a/src/exemplo/imposto/ImpostoRecord.java +++ /dev/null @@ -1,4 +0,0 @@ -package exemplo.imposto; - -public record ImpostoRecord (String taxa, String nome) { -} From da847139ff045d85f182b989f7175b278bfea143 Mon Sep 17 00:00:00 2001 From: Alex Araujo Date: Thu, 21 Aug 2025 22:08:02 -0300 Subject: [PATCH 2/2] lista de exercicios generics --- README.md | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..e9204df --- /dev/null +++ b/README.md @@ -0,0 +1,108 @@ + +# 📘 Lista de Exercícios – Java Generics - Entrega do Desafio 27/08 + +### **Exercício 1 – Lista Genérica** +Implemente uma classe genérica `Caixa` que pode armazenar um objeto de qualquer tipo. +- Crie métodos para adicionar (`set`) e recuperar (`get`) o objeto armazenado. +- Teste a classe com diferentes tipos (`String`, `Integer`, `Double`). + +--- + +### **Exercício 2 – Método Genérico** +Crie um método genérico `printArray` que recebe um array de qualquer tipo e imprime seus elementos. +- Teste com arrays de `Integer`, `Double` e `String`. + +--- + +### **Exercício 3 – Comparação Genérica** +Implemente uma interface genérica `Comparavel` com um método `ehMaiorQue(T outro)`. +- Crie uma classe `Produto` que implemente essa interface comparando pelo preço. +- Teste a comparação entre dois produtos. + +--- + +### **Exercício 4 – Bounded Generics** +Implemente um método genérico `max` que recebe uma lista de elementos que implementam `Comparable` e retorna o maior elemento. +- Teste com `Integer`, `Double` e `String`. + +--- + +### **Exercício 5 – Generic com Múltiplos Parâmetros** +Implemente uma classe genérica `Par` que representa um par chave-valor. +- Crie uma lista de pares representando alunos (`matrícula`, `nome`). +- Imprima todos os pares. + +--- + +### **Exercício 6 – Wildcards (`?`)** +Crie um método `imprimirNumeros(List)` que recebe uma lista de qualquer tipo que seja `Number` ou seus filhos (`Integer`, `Double`, `Float`) e imprime os valores. +- Teste com listas de diferentes tipos numéricos. + +--- + +### **Exercício 7 – Stack Genérica** +Implemente uma classe `Pilha` que simula o comportamento de uma pilha (push, pop, peek, isEmpty). +- Teste com pilha de `Integer` e pilha de `String`. + +--- + +### **Exercício 8 – Desafio Final (Avançado com UML)** +Crie um sistema de **repositório genérico** com as seguintes regras: + +1. Implemente uma interface `Repositorio` com os métodos: + - `void salvar(T obj);` + - `T buscarPorId(int id);` + - `List listarTodos();` + +2. Crie uma classe abstrata `RepositorioMemoria` que implementa `Repositorio` usando uma lista interna (`ArrayList`). + +3. Crie duas classes concretas: + - `RepositorioProduto` (para objetos do tipo `Produto`). + - `RepositorioCliente` (para objetos do tipo `Cliente`). + +4. Teste salvando e recuperando objetos de diferentes tipos. + +--- + +## 📊 Diagrama UML do Desafio + +```mermaid +classDiagram + direction LR + + class Repositorio~T~ { + <> + +salvar(obj: T) + +buscarPorId(id: int) T + +listarTodos() List~T~ + } + + class RepositorioMemoria~T~ { + -dados: List~T~ + +salvar(obj: T) + +buscarPorId(id: int) T + +listarTodos() List~T~ + } + + class Produto { + -id: int + -nome: String + -preco: double + } + + class Cliente { + -id: int + -nome: String + -email: String + } + + class RepositorioProduto { + } + + class RepositorioCliente { + } + + Repositorio <|.. RepositorioMemoria + RepositorioMemoria <|-- RepositorioProduto + RepositorioMemoria <|-- RepositorioCliente +``` \ No newline at end of file