Este exercício 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 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 umprintArray
que passa umArray T[]
chamado array. - Fiz um forEach onde elementos do tipo T chamados
item
(aqui poderíamos poder qualquer nome) são capturados no Arrayarray
. - 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 : DevMedia
Generic Method : 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
- HackerRank #7 | Int to String / String to Int
- HackerRank #8 | Date and Time
- HackerRank #9 | Static Initializer Block
- HackerRank #10 | Currency Formatter
- HackerRank #11 | DataTypes
- HackerRank #12 | Strings Introduction
- HackerRank #13 | Substring Comparisons
- HackerRank #14 | Abstract Class
- HackerRank #18 | BigInteger
- HackerRank #19 | Loops II
- HackerRank #20 | String Reverse
- HackerRank #23 | Instanceof keyword
- HackerRank #26 | Generics
- HackerRank #27 | 1D Array
- HackerRank #28 | Anagrams
- HackerRank #33 | Arraylist
- HackerRank #34 | Exception Handling Try / Catch
- HackerRank #36 | Exception Handling
- HackerRank #37 | List
- HackerRank #38 | SubArray
- HackerRank #39 | HashSet
- HackerRank #40 | Java Dequeue
Top comments (0)