2
respostas

Erro quando tento rodar na Testa Operação View

Meu código está igual do professor, tento rodar e dá esse erro:

Erro: C:\Users\Jubs\Desktop\dev\loja-virtual-view-repository\src\br\com\alura\jdbc\controller\ProdutoController.java:22:16 java: incompatible types: java.util.List<br.com.alura.jdbc.modelo.Produto> cannot be converted to java.awt.List

Classes que apresentam erro:


package br.com.alura.jdbc.controller;

import br.com.alura.jdbc.modelo.Produto;

import java.util.ArrayList;
import java.util.List;

public class ProdutoController {
    public void deletar(Integer id) {
        System.out.println("Deletando produto");
    }

    public void salvar(Produto produto) {
        System.out.println("Salvando produto");
    }

    public java.awt.List listar() {
        List<Produto> produtos =
                new ArrayList<Produto>();
        produtos.add(new Produto("Nome do Produto de teste"
                , "Descricao do produto de teste"));
        return produtos;
    }

    public void alterar(String nome, String descricao, Integer id) {
        System.out.println("Alterando produto");
    }
} 
2 respostas

Também apresenta erro na Classe ProdutoCategoriaFrame, porém o forúm pelo espaço, não me permite adicionar ela.

Olá Juliana, Tudo bem? Espero que sim. O Erro que você possui nesta classe que você conseguiu postar (ProdutoController ), é por que no método "listar()", você retorna alguma coisa, e esta coisa é um objeto diferente do que você "Avisou para o método" que iria retornar. Vou tentar explicar:

1) Existem métodos que chamamos de "Void", que não fornecem nenhum retorno, ou seja, eles apenas processam algo e não te devolvem nenhuma informação, que é o caso do "alterar, salvar e deletar", também existem os métodos que te devolvem algum Objeto, que é o caso do método "listar";

2) existem formas diferentes de se importar um objeto para utilizá-lo, uma forma é usando o "Import", onde você declara o caminho do objeto uma vez e depois o java utiliza esse import para localizar o objeto sempre que instanciado novamente nesta classe, e outro é utilizando o "caminho" do Objeto na hora de instanciar o mesmo ":

  • EX com "Import":

    import java.util.List;
  • EX com o "caminho":

    java.util.List<Produto> listaAcao = new java.util.ArrayList<Produto>();

3) Quando um método retorna um objeto temos que especificar o Tipo do objeto que será retornado, e ai está a grande sacada:

  • No método listar(), você está instanciando um novo objeto chamado "produtos";

  • este objeto é o que você retorna para o método na parte que você diz:

    return produtos;
  • no momento que você cria este produto você diz que ele é do tipo List:

    List<Produto> produtos = new ArrayList<Produto>();
  • note que aqui você não especificou o caminho desse "List" e isso é uma boa prática, pois ele irá utilizar o List que está especificado nos "imports":

    import java.util.List;
  • já na declaração do método você especificou o caminho do objeto que irá retornar, e aqui está o problema, pois você definiu o caminho como java.awt.List:

    public java.awt.List

    Sendo assim se tratam de dois objetos diferentes e o java está dizendo que na linha 22, o tipo que ele espera "java.awt.List" não pode consegue receber o tipo que você está retornando " java.util.List":

    "cannot be converted to java.awt.List"

    Espero que tenha ajudado e não confundido mais kkkk, se ainda ficou alguma duvida não hesite em perguntar.