1
resposta

[Dúvida] Dúvida sobre o porquê adiciona o tipo do parâmetro como parâmetro do método getInstancia()?

Gostaria de entender porque o tipo do parâmetro entra como parâmetro no método getInstancia()? Ou seja ele está chamando o próprio método onde se encontra o trecho de código, se possível poderia informar mais detalhes a esse trecho de código, mais especificamente esta linha params.add(getInstancia(tipoDoParametro));

List<Object> params = new ArrayList<>();
for(Parameter param : construtor.getParameters()) { 
    Class<?> tipoDoParametro = param.getType(); 
    params.add(getInstancia(tipoDoParametro)); 
}
1 resposta

Olá!

Class<?> tipoDoParametro = param.getType(); 

O param.getType retorna qual é o tipo do objeto no laço atual do seu 'for'. A variável tipoDoParametro recebe esse tipo e retém essa informação

params.add(getInstancia(tipoDoParametro)); 

params é a lista que foi declarada antes do ciclo do for. Ela guarda objetos do tipo Object. Isso significa que ela pode conter instâncias de qualquer classe, uma vez que todas as classes em Java herdam implicitamente da classe Object. Portanto, a lista 'params' pode conter instâncias de diferentes classes, pois todas elas são tratadas como objetos genéricos do tipo Object.

Agora que você identificou qual é o tipo de objeto e reteve ele na variável tipoDoParâmetro, você pode finalmente adicionar o objeto à sua lista de objetos params.

getInstancia()

Eu não conheço a lógica por trá desse projeto, mas acredito que esse esse método cria a instância de um objeto e retorna, basta você passar como parâmetro para ele qual é o tipo do objeto. No caso, o tipo do objeto você tem guardado na variável tipoDoParametro, por isso ela é passada como parâmetro do método getInstancia(). Sendo assim, acredito que esse método seria a mesma coisa que fazer isso:

params.add(new Objetc());

Na sua operação acontece quase a mesma coisa, só que de forma mais abstrata, pois você não sabe com qual tipo de objeto está lidando. Você captura o tipo de objeto, passa para o getInstancia, ele instancia esse objeto e finalmente você guarda a instância na sua lista.

Digamos que o tipo de objeto que a variável tipoDoParametro capturou é um Integer, o trecho params.add(getInstancia(tipoDoParametro)); poderia ser traduzido em params.add(new Integer());"

Espero que eu tenha entendido certo e possa ter ajudado! o/