[MÚSICA] [MÚSICA] Olá a todos.
Meu nome é Eduardo Guerra e estamos aqui com o Curso de
Desenvolvimento Ágil de Java Avançado.
Hoje, vamos continuar nosso assunto de tipos
genéricos para falar sobre o uso de tipos genéricos métodos.
A gente vai ver que a gente pode usar o tipo genérico, não igual o que a gente
já viu, que a gente define o tipo genérico da classe e aí utiliza ele no método.
Mas quando você define tipo genérico, dentro do escopo do próprio método,
com isso você consegue inferir tipos de parâmetros,
tipos de retorno, enfim, vamos ver como é que isso funciona.
Bom, eu começo falando assim,
às vezes não existe roupa errada, existe a combinação errada.
Então, imagina o seguinte, se eu escolho ali a camisa azul, então,
vou combinar com o tênis azul.
Se eu utilizo a camisa vermelha,
eu vou utilizar, vou combinar com o tênis vermelho.
Então, às vezes, não importa a cor da camisa, ou seja,
eu posso escolher uma camisa de qualquer cor que não vai ter camisa errada.
Mas às vezes, dependendo do que eu escolher numa peça de roupa,
as outras vão ser erradas, se forem de uma cor que não combina.
Então, por exemplo, imagina ali, eu escolho ali: Ahh!
O que é isso?
Que horror| Que marmota, que roupa brega.
Então, a ideia é que às vezes você pode aceitar qualquer coisa,
mas combinado da forma correta.
Então, a gente vai ver que não é só com roupa que a gente também pode ter
isso para parâmetros de métodos.
Então, imagina o seguinte, que eu tenho método que compara dois objetos,
então é esse Componente.comparar aqui.
Então, se eu tento comparar dois usuários, tá ok,
porque eu estou comparando dois objetos iguais.
Se eu estou comparando dois produtos, também,
porque eu estou comparando dois objetos da mesma classe.
Agora, se eu tento comparar usuário com produto, não tem nada a ver, então,
eu quero que, por exemplo, esse meu método comparar possa
aceitar dois objetos da mesma classe e
seja qualquer esse objeto, ele possa aceitar qualquer objeto,
mas eu não quero que ele aceite dois objetos de classes diferentes.
Como que a gente consegue fazer isso?
Então, eu consigo, antes ali do retorno,
definir tipo genérico e o escopo dele é o método.
Então, nesse caso, para que é que vai servir esse tipo genérico?
Ele vai servir para definir relacionamento entre parâmetros e retornos.
Então, eu posso ali cima, passar dois usuários,
posso passar dois produtos, mas não posso, no momento que eu passar usuário,
ele não vai deixar que eu passe produto no segundo parâmetro.
Então, a ideia do tipo genérico no método é fazer os parâmetros
combinarem da mesma forma ali que a roupa.
Se eu escolho a cor da camisa, então eu não posso escolher qualquer sapato,
mais ou menos isso, se eu escolho o tipo do primeiro parâmetro,
eu já não posso mais escolher o segundo.
E eu também posso utilizar o retorno.
Quando eu utilizo o tipo genérico no retorno,
o tipo do retorno é definido de acordo com o tipo de parâmetro que é passado.
Então, por exemplo, se eu tenho ali o meu método primeiro e ele retorna
o primeiro objeto de uma lista de E, eu posso dizer que o meu retorno é do tipo E.
Então, eu defino ali o tipo genérico do método,
digo que o meu retorno é E e digo que eu vou aceitar uma lista de E.
Então, a partir do momento que eu passar uma lista de string,
ele vai saber que o meu retorno é string, se eu passo uma lista de usuário,
ele vai saber que o meu retorno é usuário.
E aí agora, eu não vou precisar por exemplo, fazer nenhum tipo de cast.
Por quê?
Eu passei ali a lista de string, quando eu chamo o primeiro,
ele sabe que o retorno daquele método é string, por quê?
Porque eu passei uma lista de string para ele.
Então, o tipo de retorno é inferido.
Com isso eu consigo eliminar cast desnecessário, eu precisaria,
de repente, se eu estivesse retornando object, fazer cast para string.
Então, é muito interessante esse recurso que permite que o retorno seja
inferido de acordo com o parâmetro que está sendo passado.
Certo? Então, com isso a gente viu como que
a gente utiliza os tipos genéricos no escopo do método,
e como que a gente define essa combinação entre os parâmetros e os retornos,
possibilitando até a inferência dos retornos.
Muito obrigado e até a próxima aula.
[MÚSICA] [MÚSICA]