Talvez eu esteja perdido, talvez eu não tenha noção do que estou falando e estou errando algum conceito bem básico.
Tentei simplificar o que estou tentando, e espero que possam me ajudar! =p
Deve ter uma solução simples ou mesmo um design patter para isso.
Imagine que você tenha a seguinte classe “B” com atributos quaisquer.
}[/code]
E a classe “A” instanciasse objetos desta classe.
[code]public class A {
public B b1 = new B("b1", true);
public B b2 = new B("b2", true);
public B b3 = new B("b3", true);
void metodoQualquer(B b) {
System.out.println(b.atributo1 + " - " + b.atributo2);
}
}[/code]
Quando eu instancio um objeto “A” ele automaticamente instancia os outros 3 que estão ali.
[code]public class C {
public static void main(String[] args) {
A a = new A();
a.metodoQualquer(a.b1);
a.metodoQualquer(a.b2);
a.metodoQualquer(a.b3);
}
}[/code]
Agora imagine que a classe “A” tenha 200 objetos “b”. Vão ser instanciados todos os 200 a cada “new A”. Eu gostaria que, ao chamar o “metodoQualquer” eu consiga instanciar o new correto.
Resumindo: É como se eu tivesse uma massa de dados de objetos do tipo “B” e cada uma com um identificador(b1, b2, b3…). E quero executar um objeto B através deste identificador.
É possível executar desta forma?
“a.metodoQualquer(b2)”
Neste ponto ele encontraria o objeto e instanciara somente o “b2”.
public Livro livro1 = new Livro("capa-dura", "verde", "bonito");
public Livro livro2 = new Livro("capa-mole", "roxo", "feio");
public Livro livro3 = new Livro("capa-feia", "branco", "feio");
public Livro livro4 = new Livro("capa-mole", "amarelo", "bonitao");
//e mais uns 300 Livros ...
void lerLivro(Livro livro) {
// ... usa os atributos de um livro
}
Existe uma maneira de eu chamar estes livros desta forma?
Ambas são coleções da Collections framework do Java. A primeira é a interface que representa a estrutura de dados lista, a segunda representa a estrutura de dados conjunto. Uma pesquisa no google lhe explicará outros detalhes =)
public ArrayList< B > lista = new ArrayList< B >();
public A()
{
for( int i = 0: i < 200; i++)
{
lista.add( new B("B"+i+"",true))
}
}//Fim do construtor
void metodoQualquer(B b) { [code]
System.out.println(b.atributo1 + " - " + b.atributo2);
}
}//Fim da classe A
public class C
{
public static void main(String[] args) {
A a = new A();
a.metodoQualquer(a.lista.get(199));// indice de 0 a 199 = 200 B
}//FIm do metodo main
Pois é… eu tinha pensado num HashMap… de qualquer forma não posso fugir de uma estrutura de dados.
A não ser que use um case…switch gigante ou if´s loucamente.
[quote=Henrique.tenorio]Voce poderia ultilizar as coleções e fazer assim:
[code] public class A {
public ArrayList< B > lista = new ArrayList< B >();
public A()
{
for( int i = 0: i < 200; i++)
{
lista.add( new B("B"+i+"",true))
}
}//Fim do construtor
void metodoQualquer(B b) {
System.out.println(b.atributo1 + " - " + b.atributo2);
}
}//Fim da classe A
public class C
{
public static void main(String[] args) {
A a = new A();
a.metodoQualquer(a.lista.get(199));// indice de 0 a 199 = 200 B
}//FIm do metodo main
} //Fim da classe C
[/code][/quote]
No caso… não gostaria de saber o índice… acho que a solução do marcio_gs se encaixa melhor. Mas obrigado também
[quote=marcio_gs]Os livros podem ser repetidos? Se sim, use:
void lerLivro(List<Livro> livros) {
}
Se não, use:
void lerLivro(Set<Livro> livros) {
}
Ambas são coleções da Collections framework do Java. A primeira é a interface que representa a estrutura de dados lista, a segunda representa a estrutura de dados conjunto. Uma pesquisa no google lhe explicará outros detalhes =)[/quote]
No caso pra popular teria de ser na raça mesmo né… Porque não da pra montar esses B´s com loop(estou afirmando). =p
[code]void popula() {
B b1 = new B(“b1”, true);
B b2 = new B(“b2”, true);
B b3 = new B(“b3”, true);