Acessar um ArrayList em outra classe

Bom eu tenho um ArrayList na minha classe ControleReserva
e quero acessar esse arraylist da classe ConsultarAeroportos que fica em outro pacote no memo projeto

package Controle;
public class ControleReserva {
private List<Aeroporto> aeroportos = new ArrayList();
}

package Visao;
public class ConsultarAeroportos extends JInternalFrame {
//Como faço para acessar os objetos do ArrayList aeroportos??

se alguem puder me ajudar

valeu :slight_smile:

Você pode criar um método púbico que retorna essa lista. Ou então troca o modificador de acesso da lista. Se colocar o “public” poderá acessar de qualquer outro lugar.
Sugiro dar uma pesquisada sobre modificadores de acesso. Vale a pena…

[]'s.

Cara valeu pela dica mas só programador iniciante java

tentei fazer assim

[code]
package controle;
public class ControleReserva {
public List aeroportos = new ArrayList();
//continua

//---------------------------
package visao;
public class ConsultarAeroportos extends JInternalFrame
{

public ConsultarAeroportos()
{
    super("Consultar Aeroportos",true,true,true,true);
    this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    this.setSize(475,125);
    
    Container tela = this.getContentPane();
    JList lista;
    List itens = new ArrayList();
    ControleReserva controlador = new ControleReserva();
    
     for (int x=0; x < aeroportos.size(); x++){
        Aeroporto aeroporto = (Aeroporto)aeroportos.get(x);
        itens.add(aeroporto.getNome());
    }
    lista = new JList(itens.toArray());
     
   // tela.add(lista);
}

}[/code]

se puder dar uma ajuda para conseguir exibir no list todos os objetos do aeroporto no metodo getNome dele

Valeu

Tudo bem mr.rauber?

primeira coisa: talvez uma das coisas mais importantes é voce dar um impor na sua classe ControleReserva, pois assim voce vai poder visualizar todos os metodos ou variaveis public que pertecerem a classe.

segunda coisa: voce ou pode criar um metodo na classe ControleReserva que retorne a lista pra voce ( como ja foi citado aqui ). Mas assim voce teria que atribuir ela toda a outra lista nessa sua classe ConsultarAeroportos.

terceira coisa: voce pode apenas declarar ela como public static na classe ControleReserva.

Exemplo utilizando primeira e segunda dica:


package controle;

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

public class ControleReserva {
	public List aeroportos = new ArrayList();
	
	public List getAeroportos() {
		return aeroportos;
	}
}

package visao;

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

import controle.ControleReserva;

public class ConsultarAeroportos {

	public ConsultarAeroportos()  
	{  

		ControleReserva c = new ControleReserva();
		Aeroporto a = new Aeroporto();

		List itens = new ArrayList();  

		itens.addAll(c.getAeroportos());

		for (int x=0; x < itens.size(); x++){  
			a = itens.get(x);
			System.out.println(a.getNome());
		}  



	}

Exemplo utilizando terceira dica:


package controle;

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

public class ControleReserva {
	public static List aeroportos = new ArrayList();
	

}


package visao;

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

import controle.ControleReserva;

public class ConsultarAeroportos {

	public ConsultarAeroportos()  
	{  

		Aeroporto a = new Aeroporto();

		for (int x=0; x < ControleReserva.aeroportos.size(); x++){  
			a = ControleReserva.aeroportos.get(x);
			System.out.println(a.getNome());
		}  



	}

cara nao testei…fiz de cabeca…mas a principuo nao possui erros sitaticos…so quis lhe mostrar as duas formas de voce acessar sua lista.
caso tenha feito algo errado outros colegas virao e podem lhe ajudar ou qualquer coisa responda que estou on pela madrugada

abraco

1 curtida

:smiley:
Cara Brigadão deu certo o que tava precisando
Valeu

que isso…

precisando to ae…sempre que puder estarei ajudando.

abraco e bom inicio com java ae.

[quote=gabrielmassote]Tudo bem mr.rauber?

primeira coisa: talvez uma das coisas mais importantes é voce dar um impor na sua classe ControleReserva, pois assim voce vai poder visualizar todos os metodos ou variaveis public que pertecerem a classe.

segunda coisa: voce ou pode criar um metodo na classe ControleReserva que retorne a lista pra voce ( como ja foi citado aqui ). Mas assim voce teria que atribuir ela toda a outra lista nessa sua classe ConsultarAeroportos.

terceira coisa: voce pode apenas declarar ela como public static na classe ControleReserva.

Exemplo utilizando primeira e segunda dica:

cara nao testei…fiz de cabeca…mas a principuo nao possui erros sitaticos…so quis lhe mostrar as duas formas de voce acessar sua lista.
caso tenha feito algo errado outros colegas virao e podem lhe ajudar ou qualquer coisa responda que estou on pela madrugada

abraco[/quote]

Só alguns comentários. Esse código tem 2 erros. O primeiro é na declaração do atributo da lista na classe ControleReserva. Ela está public, portanto, não está encapsulada. Não é bom deixar “qualquer um” alterar os atributos de uma classe. O mesmo vale para outros trechos de código.

O segundo erro é que, mesmo tornando esse atributo private, a lista ainda não será encapsulada! Por que? Porque seu get retorna uma referência para a lista. Portanto, qualquer um que o utilize, fará uso da lista de maneira não encapsulada. A solução é fazer com que o get retorne uma versão imodificável da lista ou uma cópia da lista.

E para adicionar ou remover elementos? Aí sim, você adiciona métodos na classe controle reserva para isso, já validando os dados de entrada e fazendo eventuais conversões de saída. Por exemplo:

public class ControleReserva {
   private List aeroportos = new ArrayList();
	
   public List getAeroportos() {
      //Vamos retornar a lista sem que os outros possam modifica-la.
      //Isso é útil pois podemos percorrer essa lista com for each, iteradores, etc.
      return Collections.unmodifiableList(aeroportos); 
   }

   public Aeroporto get(int index) {
      //Vamos garantir o cast já na classe controle reserva.
      return (Aeroporto) aeroportos.get(index);
   }

   //Nosso add só aceita aeroportos. Isso evita que outros objetos sejam adicionados na lista.
   public void add(Aeroporto aeroporto) {
      //Podemos proibir a adição de aeroportos nulos
      if (aeroporto == null)
         throw new IllegalArgumentException("O aeroporto não pode ser nulo!");
      aeroportos.add(aeroporto);
   }
}

Se você estiver usando Java 5 ou superior, procure criar uma lista só de aeroportos, assim:

private List<Aeroporto> aeroportos = new ArrayList<Aeroporto>();

muito bom comentario…
mas nao sao erros ne? sao apenas conceitos de encapsulamento e que devem ser utilizados. Concordo plenamente com voce.

Nao é de meu costume utilizar. Mas vou tentar passar a ter esse costume.

Mas outra, o rapaz esta comecando creio eu entao melhor nao mexer muito com isso. Mas muito bom o comentario.

Parabens e abracos.

Cara obrigado pela ajuda mas como falei sou iniciante na lingaguem
fiz o que vc falou

public class ControleReserva {
    
    
   
   private List<Aeroporto> aeroportos = new ArrayList<Aeroporto>();
	
   public List getAeroportos() {
      //Vamos retornar a lista sem que os outros possam modifica-la.
      //Isso é útil pois podemos percorrer essa lista com for each, iteradores, etc.
      return Collections.unmodifiableList(aeroportos); 
   }

   public Aeroporto get(int index) {
      //Vamos garantir o cast já na classe controle reserva.
      return (Aeroporto)aeroportos.get(index);
   }
   
   public int size(){
       return aeroportos.size();
   }

   //Nosso add só aceita aeroportos. Isso evita que outros objetos sejam adicionados na lista.
   public void addAeroporto(Aeroporto aeroporto) {
      //Podemos proibir a adição de aeroportos nulos
      if (aeroporto == null)
         throw new IllegalArgumentException("O aeroporto não pode ser nulo!");
          aeroportos.add(aeroporto);
   }

//  public static List<Aeroporto> aeroportos = new ArrayList();
    public static List<Cliente> clientes = new ArrayList();
    public static List<Classificação> classificação = new ArrayList();
    
     /*
        public void addAeroporto(Aeroporto aeroporto)
        {
            aeroportos.add(aeroporto);
        }
     */ 
}

e o codigo da consulta

Aeroporto aeroporto = new Aeroporto();  
        itens.add("Lista de Aeroportos");
        /*for (int x=0; x < ControleReserva.size(); x++)
        {    
             aeroporto = ControleReserva.aeroportos.get(x);
             itens.add(aeroporto.getNome());
         }
        if(ControleReserva.aeroportos.size() == 0)
               itens.add("Sem aeroportos adicionados");
        lista = new JList(itens.toArray());
        tela.add(lista);
    }
}
         */ 
        ControleReserva controlador = new ControleReserva();
        for (int x=0; x < controlador.size(); x++)
        {    
             aeroporto = (Aeroporto)controlador.get(x);
             itens.add(aeroporto.getNome());
         }
        if(controlador.size() == 0)
               itens.add("Sem aeroportos adicionados");
        lista = new JList(itens.toArray());
        tela.add(lista);
    }

Só que não esta retornando o que preciso
da uma ajuda ai

[quote=gabrielmassote]muito bom comentario…
mas nao sao erros ne? sao apenas conceitos de encapsulamento e que devem ser utilizados. Concordo plenamente com voce.[/quote]

Violar o encapsulamento é considerado um erro, e dos bem graves. É pior um erro que deixa o seu código compilar e aparenta funcionar, do que aqueles que podem ser pegos em tempo compilação.

Mas não se preocupe, esse tipo de coisa é mais sútil mesmo, e só com o tempo você pega os macetes. :wink:

entao…concordo pelnamente…

estou ciente do encapsulamento pois estou estudando para certificacao…
so que estou comecando aos poucos alterando minha forma de programar…pois exige um cado de pratica em cima dos novos conceitos vistos…

abraco…