HackerRank #26 | Generics | 🇧🇷
Tags: java, generics, array, wecoded
Published: 2021-08-31 21:28:12

[Este exercício](https://www.hackerrank.com/challenges/java-generics/problem) pede para que completemos uma classe com um método `Generics` que consiga receber tanto `Strings` quanto `ints`.

Os `Generic Methods` são utilizados nestes casos e sua sintaxe é a seguinte (em JDK8):

```
static <T> void fromArrayToCollection(T[] a, Collection<T> c) {
    for (T o : a) {
        c.add(o); // Correct
    }
}
```

Quando usamos <T> estamos especificando o tipo de elementos que o `Array` pega. Usamos a letra T porque, por convenção, temos as seguintes iniciais no Java:

`T: Type | E: Element | V: Value | K: Key | N: Number`

Essas convenções não são obrigatórias, só facilitam a leitura e o entendimento do código para outras pessoas. Especificamos que o `Array` `T[]` se chamará `a` e se utilizará da `Collection` que passa o tipo T e que se chamará `c`.

Depois de passarmos a especificação de que `Array` e `Tipo`, fazemos um forEach (sintaxe: `for ( : ) {}`) dizendo que pegamos todo elemento `o` de tipo `T` (que não existe, então recebe qualquer coisa) do Array `a`.

Em seguida, retornamos que os itens chamados `o` serão adicionados à `c` pelo método .add.

========

O exemplo acima é da documentação oficial da Oracle. No caso da resolução do exercício, fiz da seguinte forma:

* Dentro da `class Printer`, declarei o método public que passa elementos do tipo `<T>` e um `printArray` que passa um `Array T[]` chamado array.
* Fiz um forEach onde elementos do tipo T chamados `item` (aqui poderíamos poder qualquer nome) são capturados no Array `array`.
* Por fim, o `System.out.println` imprime estes itens.

```
class Printer
{
    public <T> void printArray(T[] array) {
        for (T item : array) {
            System.out.println(item);
        }
    }
 
}
```

=========

#### Referências

[Generics](https://www.devmedia.com.br/usando-generics-em-java/28981) : DevMedia
[Generic Method](https://docs.oracle.com/javase/tutorial/extra/generics/methods.html) : Oracle

============

Essa publicação faz parte de uma série de exercícios resolvidos em Java no HackerRank. Acesse a série completa:

- [HackerRank #6 | Scanner e End-of-file](https://dev.to/beatrizmaciel/hackerrank-6-scanner-e-endoffile-462c)
- [HackerRank #7 | Int to String / String to Int](https://dev.to/beatrizmaciel/hackerrank-7-int-em-string-e-vice-versa-4n1e)
- [HackerRank #8 | Date and Time](https://dev.to/beatrizmaciel/hackerrank-8-date-and-time-1f78)
- [HackerRank #9 | Static Initializer Block](https://dev.to/beatrizmaciel/hackerrank-9-static-initializer-block-48ha)
- [HackerRank #10 | Currency Formatter](https://dev.to/beatrizmaciel/hackerrank-10-currency-formatter-22oj)
- [HackerRank #11 | DataTypes](https://dev.to/beatrizmaciel/hackerrank-11-datatypes-2e9h)
- [HackerRank #12 | Strings Introduction](https://dev.to/beatrizmaciel/hackerrank-12-strings-introduction-2d1n)
- [HackerRank #13 | Substring Comparisons](https://dev.to/beatrizmaciel/hackerrank-13-substring-comparisons-57ha)
- [HackerRank #14 | Abstract Class](https://dev.to/beatrizmaciel/hackerrank-14-abstract-class-3h5d)
- [HackerRank #18 | BigInteger](https://dev.to/beatrizmaciel/hackerrank-18-biginteger-4jad)
- [HackerRank #19 | Loops II](https://dev.to/beatrizmaciel/hackerrank-19-loops-ii-385n)
- [HackerRank #20 | String Reverse](https://dev.to/beatrizmaciel/hackerrank-20-string-reverse-nec)
- [HackerRank #23 | Instanceof keyword](https://dev.to/beatrizmaciel/hackerrank-23-instanceof-keyword-3lh6)
- HackerRank #26 | Generics
- [HackerRank #27 | 1D Array](https://dev.to/beatrizmaciel/hackerrank-27-1d-array-5f80)
- [HackerRank #28 | Anagrams](https://dev.to/beatrizmaciel/hackerrank-28-anagrams-boi)
- [HackerRank #33 | Arraylist](https://dev.to/beatrizmaciel/hackerrank-33-arraylist-2lj1)
- [HackerRank #34 | Exception Handling Try / Catch](https://dev.to/beatrizmaciel/hackerrank-34-exception-handling-try-catch-144f)
- [HackerRank #36 | Exception Handling](https://dev.to/beatrizmaciel/hackerrank-35-exception-handling-44e)
- [HackerRank #37 | List](https://dev.to/beatrizmaciel/hackerrank-37-list-4gmj)
- [HackerRank #38 | SubArray](https://dev.to/beatrizmaciel/hackerrank-38-subarray-1693)
- [HackerRank #39 | HashSet](https://dev.to/beatrizmaciel/hackerrank-39-hashset-3jb3)
- [HackerRank #40 | Java Dequeue](https://dev.to/beatrizmaciel/hackerrank-40-java-dequeue--497h)