Oii, Malkon! Tudo bem?
Ótima pergunta, vamos entender isso juntos! A diferença está muito relacionada com o genercs declarados de maneiras diferentes.
No primeiro exemplo, com o método getConteudo()
o T é um tipo genérico. A classe que contém este método deve ser uma classe genérica para poder rodar o código sem erros, onde o T
seja um parâmetro de tipo que será associado à definição de uma classe.
No segundo exemplo, com o método somaConteudoNaCaixa(T valor){}
, o método que é genérico não importa se a classe é ou não é genérica. O <T>
antes de somaConteudoNaCaixa(T valor){}
é indicativo que o método possui o seu parâmetro próprio de tipo genérico. O T
só é considerado válido dentro do contexto do método como um todo.
Em resumo, o método public T getConteudo()
o tipo genérico T
é definido no nível da classe. E o public <T> somaConteudoNaCaixa(T valor)
, o tipo genérico T
é definido no nível do método.
Reuni alguns links para que você possa expandir os seus conhecimentos sobre o tema:
A página da documentação pode abrir em inglês, caso não tenha familiaridade com o idioma, clique com o botão direito do mouse em qualquer canto da página e escolha a opção Traduzir para o português.
Espero ter ajudado. Qualquer dúvida, não hesite em recorrer ao fórum.
Bons estudos, Malkon!