Duvida Java CRUD/ ele só retorna null quando tento cadastrar

Realizar um “CRUD” (cadastrar, alterar, remover e buscar) de uma entidade,quando tento listar os cadastros ele retorna null.

package com.prova.poo.entidade;

public class Vinho {

private int id;
private	String uva;
private String nome;
private int anofab;
private String paisdeorig;
private String tipo;

public Vinho() {
	
}
public Vinho(String nomeEnviado, String uvaEnviado) {
setNome(nomeEnviado);
setUva(uvaEnviado);

}

	public Vinho(int id, String uvaEnviado, String nomeEnviado, int anofabEnviado, String paisdeorigEnviado, String tipoEnviado) {
		setUva(uvaEnviado);
		setNome(nomeEnviado);
		setAnofab(anofabEnviado);
		setPaisdeorig(paisdeorigEnviado);
		setTipo(tipoEnviado);
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getUva() {
		return uva;
	}

	public void setUva(String uva) {
		this.uva = uva;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public int getAnofab() {
		return anofab;
	}

	public void setAnofab(int anofab) {
		this.anofab = anofab;
	}

	public String getPaisdeorig() {
		return paisdeorig;
	}

	public void setPaisdeorig(String paisdeorig) {
		this.paisdeorig = paisdeorig;
	}

	public String getTipo() {
		return tipo;
	}

	public void setTipo(String tipo) {
		this.tipo = tipo;
	}

}


package com.prova.poo.dao;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;

import com.prova.poo.entidade.Vinho;

public class VinhoDao implements Dao {

public List<Vinho> vinhos = new ArrayList();

public VinhoDao() {
	vinhos.add(new Vinho(1,"Sauvignon Blanc","Ravanal Sauvignon Blanc", 2019 ,"Chile", "Branco"));

}

public Optional<Vinho> buscar(long id) {
	return Optional.ofNullable(vinhos.get((int)id));
}


public List<Vinho> buscarTodos() {
	
	return vinhos;
}


public void salvar(Vinho vinhoEnviado) {
	vinhos.add(vinhoEnviado);
	
}


public void atualizar(Vinho vinhoEnviado, String[] params) {
	vinhoEnviado.setNome(Objects.requireNonNull(params[0], "O nome nao pode ser nulo! "));
	
}


public void deletar(Vinho t) {
	vinhos.remove(vinhoEnviado);
	
	
}

}

package com.prova.poo.dao;

import java.util.List;
import java.util.Optional;

public interface Dao {

Optional<T> buscar(long id); 

List<T> buscarTodos(); 
 
void salvar(T t); 
 
void atualizar(T t, String[] params); 
 
void deletar(T t); 

}


package com.prova.poo.teste;

import java.util.Optional;
import java.util.Scanner;

import com.prova.poo.dao.Dao;
import com.prova.poo.dao.VinhoDao;
import com.prova.poo.entidade.Vinho;

public class Testemain {

private static Dao<Vinho> vinhoDao;

public static void main(String[] args) {
	
	
	vinhoDao = new VinhoDao();

	while (true) {
	
		Scanner entradaValor = new Scanner(System.in);
		
		System.out.println("_________________________________________");
	System.out.println("|  OPÇÃO   |   Entidade  |   AÇÃO       |");
	System.out.println("________________________________________");
	System.out.println("|   1      |   Vinho     |   cadastrar  |");
	System.out.println("|   2      |   Vinho     |   alterar    |");
	System.out.println("|   3      |   Vinho     |   remover    |");
	System.out.println("|   4      |   Vinho     |   listar     |");
	System.out.println("|   5      |   finalizar                |");
	System.out.println("________________________________________");
	System.out.println(" * Qual a opção você deseja ?    ");

	int opcao = 0;
	
	
	
	try {
		
		opcao = entradaValor.nextInt();
	} catch (Exception erro) {
		System.out.println(" Erro ao digitar um valor inesperado! ");
		System.out.println(" Sistema finalizado! ");
		System.exit(0);
		
	}
		switch(opcao) {
		case 1 : 
			System.out.println("Digite o nome da uva : ");
			String nome = entradaValor.next();
			
			System.out.println("Digite o tipo do vinho : ");
			String tipo = entradaValor.next();
			
			System.out.println("Digite o ano de fabricação: ");
			int anofab = entradaValor.nextInt();
			
			System.out.println("Digite o pais de origem do vinho: ");
			String paisdeorig = entradaValor.next();
			
			
			Vinho vinho = new Vinho();
			
			vinhoDao.salvar(vinho);
			

			
			break;
		
		case 2 :	
			
			System.out.println("Qual vinho você deseja alterar? ");
			long id = entradaValor.nextLong();
			Optional<Vinho> vinho2 = vinhoDao.buscar(id);
			
			System.out.println("Digite o nome que voce deseja alteral : ");
			String nome2 = entradaValor.next();
			
			System.out.println("Digite o tipo de vinho que voce deseja alteral : ");
			String tipo2 = entradaValor.next();
			
			vinhoDao.atualizar(vinho2.get(), new String[]{nome2,tipo2});
			
			break;
		
		case 3 :
			
			System.out.println("Qual vinho você deseja remover ? ");
			long id2 = entradaValor.nextLong();
			Optional<Vinho> vinho3 = vinhoDao.buscar(id2);
			vinhoDao.deletar(vinho3.get());
			
			
			break;
		
		case 4 :
			vinhoDao.buscarTodos().forEach(user -> System.out.println(user.getNome()));
			
			
			break;
		
		case 5 :	
			System.out.println("Sistema finalizado.");
			System.exit(0);
		break;
		default:
			System.out.println("Não foi possivel encontrar a opção desejada.");
		
		}

		System.out.println("Deseja continuar ?    [S]   ou   [N]   ");
		String opcao2 = entradaValor.next();
		
		if (opcao2.equals("N") || opcao2.equals("n")) {
			System.out.println("Sistema finalizado");
			System.exit(0);
			
		}
		
	
	}

}

Bem, aqui funcionou depois de algumas alterações.

  1. Mudar a interface Dao deixando ela genérica.
  1. A classe VinhoDao agora deve implementar o Dao modificado, passando a classe a ser usada.
  1. Ainda na classe VinhoDao, no método deletar, você esqueceu de alterar o nome da variável de referência.

  2. No primeiro case do switch você esqueceu de setar os atributos, apenas cria um objeto Vinho vazio.

Bem, se precisar de mais ajuda é só falar, um bom dia para você.

1 curtida

Olá,agradeço a resposta.
Estou com duvida na maneira que eu deixo a interface Dao generica,e como eu implemento ela na classe VinhoDao

Esse post mostra resumidamente as Generics, da uma olhada depois: Genercis