Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Duvida sanada

No trecho que instancia um construtor com parametros, ao invés de instanciar novos Class dos tipos do parametros, adicionei a uma List de Types e continuou funcionando, seria por que toda classe tipo Class implementa a interface Type portanto podendo ser identificada como Type também?

Abaixo o código

package br.com.alura.alurator.ioc;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Parameter;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;

public class ContainerIoC {
    public Object getInstancia(Class<?> tipoFonte) {
        Stream<Constructor<?>> streamConstrutor = Stream.of(tipoFonte.getDeclaredConstructors());
        Optional<Constructor<?>> optionalConstrutor = streamConstrutor.filter(construtor -> construtor.getParameterCount() == 0)
                                                                      .findFirst();

        try {
            if (optionalConstrutor.isPresent()) {
                Object newInstance = optionalConstrutor.get().newInstance();
                return newInstance;
            } else {
                Constructor<?> construtor = tipoFonte.getDeclaredConstructors()[0];
                List<Type> params = new ArrayList<>();
                for (Parameter p : construtor.getParameters()) {
                    params.add(p.getType());
                }
                return construtor.newInstance(params.toArray());
            }
        } catch (InstantiationException | IllegalAccessException | IllegalArgumentException
                | InvocationTargetException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }
}
1 resposta
solução!

Não havia editado o Controller, por isso tudo ainda funcionava.