Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Dificuldade em localizar os erros

Na classe Alurator do projeto alurator, tem new instance() declarado de forma errada e na classe TesteInstanciaObjeto do pacote do pacote alurator-playground também dá erro na declaração do newInstance(). Na classe Main do projeto estoque-api, tem um erro de import (import br.com.alura.alurator.Alurator) , e na classe ProdutoController do projeto estoque-api fica dando erro falando que o tipo da lista que retorna não está visível (The type List is not visible). O que recomendo é pegar as classes da video aula e as minhas que estão dando erro e substituir para me ajudar porque eu tinha tentado arrumar e não deu certo.

7 respostas

Classe Alurator

package br.com.alura.alurator;

public class Alurator {

    private String pacoteBase;

    public Alurator(String pacoteBase) {
        this.pacoteBase = pacoteBase;
    }

    public Object executa(String url) {

        String[] partesUrl = url.replaceFirst("/", "")
            .split("/");

        String nomeControle = 
                Character.toUpperCase(partesUrl[0].charAt(0))  +
                partesUrl[0].substring(1) + "Controller";

        try {
            Class<?> classeControle = Class.forName(pacoteBase + nomeControle);

                Object instanciaControle = classeControle.newInstance();

                System.out.println(instanciaControle);

                return null;

        }catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }

    }
}

Classe TesteInstanciaObjeto

package br.com.alura.alurator.playground.reflexao;

import br.com.alura.alurator.playground.controle.Controle;

public class TesteInstanciaObjeto {

    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
        //url -> /controle/lista


        Class<Controle> controleClasse1 = Controle.class;

        Controle controle = new Controle();
        Class<? extends Controle> controleClasse2 = controle.getClass();

        Class<?> controleClasse3 = 
                Class.forName("br.com.alura.alurator.playground.controle.Controle");

        Controle objetoControle = controleClasse1.newInstance();

        Object outroObjetoControle = controleClasse3.newInstance();

        System.out.println(objetoControle instanceof Controle);

        System.out.println(outroObjetoControle instanceof Controle);

    }
}

Classe Main do projeto estoque-api

package br.com.alura.estoque;

import java.util.Scanner;

import br.com.alura.alurator.Alurator;

public class Main {

    public static void main(String[] args) throws Exception {

        try (Scanner s = new Scanner(System.in)) {
            String url = s.nextLine();

            Alurator alurator = new Alurator("br.com.alura.estoque.controle.");
            while (!url.equals("exit")) {
                Object response = alurator.executa(url);

                System.out.println("Response: " + response);

                url = s.nextLine();
            }
        }
    }

}

Classe ProdutoController do projeto estoque-api

package br.com.alura.estoque.controle;

import java.util.List;
import java.util.stream.Collectors;

import br.com.alura.estoque.dao.ProdutoDaoMock;
import br.com.alura.estoque.modelo.Produto;

public class ProdutoController {

    private ProdutoDaoMock produtoDao;

    public ProdutoController() {
        produtoDao = new ProdutoDaoMock();
    }

    public List<Produto> lista() {
        return produtoDao.lista();
    }

    public List<Produto> filtra(String nome) {
        return produtoDao.lista().stream()
                            .filter(produto -> produto.getNome().toLowerCase().startsWith(nome.toLowerCase()))
                            .collect(Collectors.toList());
    }

    public List<Produto> filtra(String nome, String marca) {
        return produtoDao.lista().stream()
                            .filter(produto -> 
                                produto.getNome().toLowerCase().startsWith(nome.toLowerCase())
                                && produto.getMarca().equalsIgnoreCase(marca)
                            )
                            .collect(Collectors.toList());
    }
}

O restante das classes não gera nenhum erro ou warning, mas os projetos do instrutor no video, não estão com nenhum erro, por isso fiquei na dúvida

solução!

Oi Gustavo, tudo bem?

Sobre o erro de import é por conta do projeto "estoque-api" precisar conter em seu classpath o projeto "alurator".

Referente aos warnings, do tipo do newInstance que dá a mensagem: "The method newInstance() from the type Class<capture#2-of ?> is deprecated since version 9" é por conta da versão do seu JDK ser mais nova, mas não impacta na funcionalidade do projeto.

Abraço!

Ok, Obrigado!