Oi Robert! Tudo bem?
Sei bem como essas partes do código podem ser um pouco confusas no começo, mas vou tentar explicar de uma maneira simples para ajudar você a entender. Você verá aqui no Globo Re.. Fórum da Alura!
<T> T
no método
Essa notação é usada para indicar que o método é genérico. Em outras palavras, ele pode trabalhar com qualquer tipo de dado. O <T>
é um marcador de tipo genérico. Quando você vê <T>
, isso significa que o método pode retornar qualquer tipo de objeto, e o tipo específico será determinado quando o método for chamado.
Class<T> classe
como parâmetro
O parâmetro Class<T> classe
é usado para passar a classe do tipo que você quer que o JSON seja convertido. Isso é necessário porque, no momento da execução, o Java precisa saber o tipo exato para o qual o JSON será convertido.
Exemplo Prático: Vamos imaginar que você tem duas classes, DadosSerie
e DadosEpisodio
, e você quer converter um JSON para uma dessas classes dependendo do contexto.
public class DadosSerie {
private String titulo;
private int totalTemporadas;
// Getters e Setters
}
public class DadosEpisodio {
private String titulo;
private int numeroEpisodio;
// Getters e Setters
}
Com a interface genérica IConverteDados
, você pode criar um método que pode converter JSON para qualquer uma dessas classes:
public interface IConverteDados {
<T> T obterDados(String json, Class<T> classe);
}
E a implementação ficaria assim:
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class ConverteDados implements IConverteDados {
private ObjectMapper mapper = new ObjectMapper();
@Override
public <T> T obterDados(String json, Class<T> classe) {
try {
return mapper.readValue(json, classe);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
}
Agora, você pode usar essa implementação para converter JSON para DadosSerie
ou DadosEpisodio
:
public class Main {
public static void main(String[] args) {
ConverteDados conversor = new ConverteDados();
String jsonSerie = "{ \"titulo\": \"Breaking Bad\", \"totalTemporadas\": 5 }";
DadosSerie dadosSerie = conversor.obterDados(jsonSerie, DadosSerie.class);
System.out.println(dadosSerie.getTitulo()); // Saída: Breaking Bad
String jsonEpisodio = "{ \"titulo\": \"Pilot\", \"numeroEpisodio\": 1 }";
DadosEpisodio dadosEpisodio = conversor.obterDados(jsonEpisodio, DadosEpisodio.class);
System.out.println(dadosEpisodio.getTitulo()); // Saída: Pilot
}
}
Espero ter ajudado e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.