Jump to content
ricain

ArrayList de uma class para outra

Recommended Posts

ricain

Bom dia,

Tenho aqui o seguinte problema pelo qual não consigo resolver o problema.

Tenho umas série de arraylist pelas quais gostaria de ter acesso noutras class do meu projecto. Mas a minha programação esta mal porque cada vez que tento aceder a eles no fundo crio novas arraylist na minha outra class, e eu queria aceder a aquelas da class de origem.

O meu codigo:

public class BaseDados
{

    //aqui crio os ArrayList 

    public ArrayList listRest      = new ArrayList();

    public ArrayList listBar       = new ArrayList();

    public ArrayList listEven      = new ArrayList();

    public ArrayList listMuseu     = new ArrayList();

    public ArrayList listLazer     = new ArrayList();

    public ArrayList listMonumento = new ArrayList();
    /*
     * Carregamento dos ArrayList
     */
    public void BaseDados()
    {

        addListaRestaurante();
        addListaBar();
        addListaEven();
        addListaMuseu();
        addListaLazer();
        addListaMonumento();

    }

    private void addListaRestaurante()
    {
        PontoInteresse Rest1  = new PontoInteresse("Porco Preto");
        PontoInteresse Rest2  = new PontoInteresse("Etecetera");
        PontoInteresse Rest3  = new PontoInteresse("Art&gula Restaurante-Café-Bar");
        PontoInteresse Rest4  = new PontoInteresse("Retiro dos Sabores");
        PontoInteresse Rest5  = new PontoInteresse("Pinguim");
        PontoInteresse Rest6  = new PontoInteresse("Solar do Arco");
        PontoInteresse Rest7  = new PontoInteresse("Dois Arcos");
        PontoInteresse Rest8  = new PontoInteresse("El-rei Dom Afonso");
        

        listRest.add(Rest1);
        listRest.add(Rest2);
        listRest.add(Rest3);
        listRest.add(Rest4);
        listRest.add(Rest5);
        listRest.add(Rest6);
        listRest.add(Rest7);
        listRest.add(Rest8);
        

    }
//depois disso volto a repetir um método para os meus outros pontos de interesses
}

Aqui a class onde quero aceder a arraylist da class anterior

public class Classificacao
{

    private ArrayList arraySetEstrela = new ArrayList();

    private int ponto = 0;

   
    public Classificacao()
    {

    }

    /*
     * Aqui vai conseguir escolher o dqetalhe do ponto de interesse escolhido
     */
    public void getInteresse(int ponto)
    {
        this.ponto = ponto;

        BaseDados test = new BaseDados();
        //BaseDados Classificacao = new BaseDados(this.listRest);

        //aqui digo que a minha arraylit "arraysetestrela" é igual a array 
        //que o utilizador escolheu para editar as estrela do detalhe
        switch(ponto){
            case 1:
            arraySetEstrela = test.listRest;
            //arraySetEstrela = (BaseDados) ArrayList listRest;
            break;
            case 2 :
            arraySetEstrela = test.listBar;
            break;
            case 3 :
            arraySetEstrela = test.listEven;
            break;
            case 4 :
            arraySetEstrela = test.listMuseu;
            break;
            case 5 :
            arraySetEstrela = test.listLazer;
            break;
            case 6 : 
            arraySetEstrela = test.listMonumento;
        }

    }
//a seguir tem mais métodos mas que não interfere no meu problema
}

Eu meu erro deve se situar quando faço : "BaseDados test = new BaseDados();" mas é a unica maneira que eu conheço para ir a class "basedados" e ter acesso ao que eu quero dessa class.

Agradeço qualquer ajuda.

Obrigado.

Share this post


Link to post
Share on other sites
brunoais

Bom dia,

Tenho aqui o seguinte problema pelo qual não consigo resolver o problema.

Tenho umas série de arraylist pelas quais gostaria de ter acesso noutras class do meu projecto. Mas a minha programação esta mal porque cada vez que tento aceder a eles no fundo crio novas arraylist na minha outra class, e eu queria aceder a aquelas da class de origem.

O meu codigo:

...

Aqui a class onde quero aceder a arraylist da class anterior

public class Classificacao
{

    private ArrayList arraySetEstrela = new ArrayList();

    private int ponto = 0;

   
    public Classificacao()
    {

    }

    /*
     * Aqui vai conseguir escolher o dqetalhe do ponto de interesse escolhido
     */
    public void getInteresse(int ponto)
    {
        this.ponto = ponto;

        BaseDados test = new BaseDados();
        //BaseDados Classificacao = new BaseDados(this.listRest);

        //aqui digo que a minha arraylit "arraysetestrela" é igual a array 
        //que o utilizador escolheu para editar as estrela do detalhe
        switch(ponto){
            case 1:
            arraySetEstrela = test.listRest;
            //arraySetEstrela = (BaseDados) ArrayList listRest;
            break;
            case 2 :
            arraySetEstrela = test.listBar;
            break;
            case 3 :
            arraySetEstrela = test.listEven;
            break;
            case 4 :
            arraySetEstrela = test.listMuseu;
            break;
            case 5 :
            arraySetEstrela = test.listLazer;
            break;
            case 6 : 
            arraySetEstrela = test.listMonumento;
        }

    }
//a seguir tem mais métodos mas que não interfere no meu problema
}

Eu meu erro deve se situar quando faço : "BaseDados test = new BaseDados();" mas é a unica maneira que eu conheço para ir a class "basedados" e ter acesso ao que eu quero dessa class.

Agradeço qualquer ajuda.

Obrigado.

Bem... Não sei aonde é que aprendeste Java mas isso está uma coisa horrível!

Nem sei por onde começar!!!

1º:

public class BaseDados
{

    //aqui crio os ArrayList 

    private ArrayList<PontoInteresse> listRest;

    private ArrayList<PontoInteresse> listBar;

    private ArrayList<PontoInteresse> listEven;

    private ArrayList<PontoInteresse> listMuseu;

    private ArrayList<PontoInteresse> listLazer;

    private ArrayList<PontoInteresse> listMonumento;
    /*
     * Carregamento dos ArrayList
     */
    public BaseDados()
    {
        
        listRest = new ArrayList();
        listBar = new ArrayList();
        listEven = new ArrayList();
        listMuseu = new ArrayList();
        listLazer = new ArrayList();
        
        
        addListaRestaurante();
        addListaBar();
        addListaEven();
        addListaMuseu();
        addListaLazer();
        addListaMonumento();

    }

    private void addListaRestaurante()
    {
        listRest.add(new PontoInteresse("Porco Preto"));
        listRest.add(new PontoInteresse("Etecetera"));
        listRest.add(new PontoInteresse("Art&gula Restaurante-Café-Bar"));
        listRest.add(new PontoInteresse("Retiro dos Sabores"));
        listRest.add(new PontoInteresse("Pinguim"));
        listRest.add(new PontoInteresse("Solar do Arco"));
        listRest.add(new PontoInteresse("Dois Arcos"));
        listRest.add(new PontoInteresse("El-rei Dom Afonso"));

    }
//depois disso volto a repetir um método para os meus outros pontos de interesses
}

Muito melhor!

Agora. Para dares acesso aos ArrayList fora desta class basta criares getters. Por exemplo:

public ArrayList<PontoInteresse> getListRest(){
        return listRest;
}

Alguém que faça o resto por mim. Já me cansei.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
ricain

Estou a começar por isso pode ser horrível, mas faço com o que eu sei...

Vou tentar aplicar aquilo que mostrou.

Obrigado pela ajuda.

Share this post


Link to post
Share on other sites
Baderous

Muito melhor!

Mudaste o tipo das variáveis de instância para um tipo parametrizado mas depois atribuis um raw type no construtor.

Share this post


Link to post
Share on other sites
Knitter

Atenção que se passas a usar genéricos (não tens de os usar para teres Java correcto) tens também de instanciar as classes usando a sintaxe com genéricos.

private ArrayList<PontoInteresse> listRest;
//...
listRest = new ArrayList<PontoInteresse>();

Esse getter, embora dê acesso à ArrayList não está implementado seguindo o objectivo dos getters/setters e não promove o encapsulamento.

Uma implementação alternativa seria:

public List<PontoInteresse> getListRest(){
    if(listRest != null) {
        return new ArrayList<PontoInteresse>(listRest);
    }
    return null;
    //ou se quiseres devolver sempre uma lista válida
    //return new ArrayList<PontoInteresse>();
}

Com isto garantes o encapsulamento dos teus atributos já que não devolves a referência para a lista interna mas sim uma lista com os objectos que são importantes, e evitas que código externo ao objecto consiga destruir a sua representação interna, e ganhas maior independência dado que não estás a devolver uma classe concreta mas sim a interface genérica que todas as listas implementam. Garantes que se precisares de alterar  de uma ArrayList para uma LinkedList, ou outro tipo de lista, não precisas mudar mais nada além da variável.

Share this post


Link to post
Share on other sites
brunoais

Mudaste o tipo das variáveis de instância para um tipo parametrizado mas depois atribuis um raw type no construtor.

É verdade, esqueci-me de alterar tb no construtor  :P . Alterar código aqui no forum é mto complicado e coisas cmo essas acabam por escapar no meio de tanto copy & paste.

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.