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

Dúvida - métodos do ArrayList em classe não estática

Olá!

Estava tentando fazer uma classe ListaDeClientes pra armazenar algumas instâncias da classe Cliente em um ArrayList. Minha ideia era depois usar essa classe como uma espécie de banco, de modo que, além de ter uma amostra, na Main fosse possível chamar um método da ListaDeClientes para adicionar um novo cliente na ArrayList.

A classe estava assim:

package com.alura.bancoteste;

import java.util.ArrayList;

public class ListaDeClientes {
// aqui seriam as amostras de Cliente 
    Cliente gloriagroove = new Cliente("Gloria Groove", "11122233344", "gg@email.com");
    Cliente juditeraimunda = new Cliente("Judite Raimunda", "11122233355", "judite@email.com");
    Cliente mariahcarey = new Cliente("Mariah Carey", "11133322245", "mcarey@email.com");

// Criando um array pra armazenar as amostras
    ArrayList<Cliente> amostra = new ArrayList<>();
    amostra.add(gloriagroove); // fica sublinhado de vermelho
    amostra.add(juditeraimunda); // fica sublinhado de vermelho

    ArrayList<Cliente> listaDeClientes = new ArrayList<>(amostra);

    public void adicionaCliente(Cliente cliente) {
        listaDeClientes.add(cliente);
    }

}

Porém a classe não compila, fica sublinhado de vermelho ali no amostra.add(gloriagroove); com a seguinte mensagem: Syntax error on token ".", @ expected after this token

Porém, quando eu coloco o código dentro de um public static void main, e comento o método adicionaCliente a classe compila. Não entendi porque isso aconteceu, os métodos do ArrayList só funcionam em classes / métodos estáticos?

2 respostas
solução!

E ai Alonso blza , então vou explicar de forma humilde kkkkk, segue o código que desenvolvi,

  • pelo que entendi voce gostaria que as amostras de clientes fossem pré carregadas quando executar o Main().
  • a solução realmente é criar um bloco static {} e colocar tudo dentro na sua classe ListaDeClientes(como segue) - usei apenas um ArrayList
  • bom vc estanciou cliente fora da main o que obriga a aloca-los em um espaço de memória por isso o bloco static
  • ou seja não tem haver com o ArrayList, o que pega mesmo é a criação dos objetos em uma classe sem o Main()

Espero ter ajudado.

public class ListaDeClientes {

    //array que simula o banco - observação a boa prática é ultilizar List<T> list = new ArrayList<>();
    private static ArrayList<Cliente> listaDeClientes = new ArrayList<>();

    // amostras pré carregadas

    static {

 //aqui seriam as amostras de Cliente 
    Cliente gloriagroove = new Cliente("Gloria Groove", "11122233344", "gg@email.com");
    Cliente juditeraimunda = new Cliente("Judite Raimunda", "11122233355", "judite@email.com");
    Cliente mariahcarey = new Cliente("Mariah Carey", "11133322245", "mcarey@email.com");


    listaDeClientes.add(gloriagroove);
    listaDeClientes.add(juditeraimunda); 
    listaDeClientes.add(mariahcarey);

    }


    //recupera Lista
    public static ArrayList<Cliente> getLista() {
        return listaDeClientes;
    }


    //add clie em lista
    public void adicionaCliente(Cliente cliente) {
        listaDeClientes.add(cliente);
    }

}

Boa, Phill, obrigado pela ajuda!