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/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 extends Number>)` 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
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 super Number> lista) {
+ lista.forEach(System.out::println);
+ }
+
+ public void imprimeListaWildCardExtends(List extends Number> 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) {
-}