Instanciar na chamada de método

Olá a todos,

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]public class B {

String atributo1;
boolean atributo2;

public B(String atributo1, boolean atributo2) {
	this.atributo1 = atributo1;
	this.atributo2 = atributo2;
	System.out.println("Criou");
}

}[/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”.

Console:
Criou
Criou
Criou
b1 - true
b2 - true
b3 - true

Bom… se não entenderem eu tento explicar melhor

Abraço

Explica melhor!

Ficou muito obscura sua explicação…

Eu tenho uma MASSA DE DADOS…

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?

objetoQualquer.lerLivro(livro1);

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 =)

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) {  [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  

} //Fim da classe C
[/code]

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.

Mas vou tentar como disse. Obrigado

[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);

	massaDeDados.add(b1);
	massaDeDados.add(b2);
	massaDeDados.add(b3);
	
}[/code]