JayCesar / uni_life

0 stars 0 forks source link

Generics #5

Open JayCesar opened 2 months ago

JayCesar commented 2 months ago

📚 Motivação

Defeito de software: São um fato da vida. Acostume-se, Generics aumentam o número de defeitos que a gente consegue encontrar já em tempo de compilação.

Mas...por que Generics?

List list - new ArrayList(); // LIst<String> list = new ArrayList<String>();
list.add("Olá!"); // list.add("Olá!");
String s = (String) list.get(0); // String s = list.get(0); // sem cast

Esse conjunto de comandos só funciona porque essas três linhas estão juntas. Se eles estivessem separadas....é capaz de eu obter um Casting Exception.

| Tempo de compilação diferente Tempo de Execução

O uso de genericos permite que o tipo (classes ou intercace) seja usado como um parâmetro da definição de novas classes, interfaces e métodos. O uso de genéricos garante que o código seja:

JayCesar commented 2 months ago

Em Inglês Generic Type é um tipo que possui um ou mias parâmetros de tipo. Box é um tipo genérico e T é seu parâmetro de tipo.

Quando eu for utilizar o Generics eu preciso passar um tipo de refência e não primitivo!

Convenção de java

E - Elemento (muito usado pelas classes de coleção) K - Chave (Key) N - Número T - Tipo V - Valor

Evocação e instanciação de um tipo genérico

Eu posso colocar instaências de um classe em um interface que é implementada por essa interface

JayCesar commented 2 months ago

Tipo parametrizado

image


OrderedPair<String, Box<Integer>> p =
new OrderedPair<>("primos", new Box<Integer>(...));```

## Tipo Raw
Se eu defino uma classe com o parâemtro T, ou seja, do Tipo T e na hora de instanciar não passar o tipo, ela irá funcionar como se T fosse substituído por Object.

## Parâmetros Limitados