2010-03-12 10 views
5

¿Cuál es la mejor manera de hacer lo siguiente:añadir objetos de diferente nombre a través de bucle

List<MyObject> list = new LinkedList<MyObject>(); 

for(int i=0; i<30;i++) 
{ 
    MyObject o1 = new MyObject(); 
    list.add(o1); 
} 

Pero las cosas es que no quiero crear objetos con el mismo nombre, les quiero crear con un nombre diferente como o1,o2,o3,o4,o5,o6,o7,o8,o9,o10 y quiero agregar cada uno a la lista. Cuál es la mejor manera de hacer esto ?

+2

Disculpa, pero ¿qué quieres decir con name? El nombre de la variable local es eliminado por el compilador. –

+2

La gran pregunta aquí es ¿por qué? El nombre de la variable en este caso no sobrevivirá más allá del forloop (o incluso en la siguiente iteración del forloop) en cualquier caso. ¿Cómo/Por qué es importante su nombre? – GWLlosa

+1

¿Por qué necesita tener el nombre de variable de su objeto diferente dentro de un bucle? Los nombres de las variables en el ejemplo que proporcione son irrelevantes ... –

Respuesta

10

No es necesario que utilice un nombre diferente para cada objeto. Como el objeto o1 se declara dentro del bucle for, el alcance de la variable o1 está limitado al bucle for y se vuelve a crear durante cada iteración ... excepto cada vez que se referirá al nuevo objeto creado durante esa iteración. Tenga en cuenta que la variable en sí no está almacenada en la lista, solo el objeto al que se refiere.

Si no necesita hacer nada más con el nuevo objeto que no sea agregarlo a la lista, que puede hacer:

for(int i=0; i<30;i++) 
{ 
    list.add(new MyObject()); 
} 
+0

No fue una respuesta a su pregunta. – Younes

+3

¿Cómo es eso? Parece una respuesta perfectamente buena para mí. – razlebe

+1

Hmm, probablemente leí la pregunta por el camino equivocado entonces ... Pensé que estaba después de nombrar sus objetos: o1, o2, o3, o4, o5, o6, o7, o8, o9, o10. Dio el punto que quité;). – Younes

1

Sus objetos no tienen nombres. La variable o1 tiene un nombre, pero no está vinculado al objeto, excepto que la variable hace referencia al objeto. El objeto en la lista no tiene conocimiento de haber sido referenciado por la variable o1.

Por lo que estás haciendo, no es necesario una variable en absoluto, como dijo Stephen en su respuesta que puede simplemente añadir los objetos directamente:

for (int i=0; i<30;i++) 
{ 
    list.add(new MyObject()); 
} 
2

En el contexto de su bucle, no necesita preocuparse por encontrar un nombre para cada nueva instancia que cree. Es suficiente decir

List<MyObject> list = new LinkedList<MyObject>(); 

for(int i=0; i<30;i++) 
{ 
list.add(new MyObject()); 
} 
6

Por qué le gustaría darles diferentes nombres? Estás creando el objeto dentro del ciclo for, por lo que no existe afuera, y por eso no veo razón para darles nombres diferentes.

Para responder a su pregunta: La única manera que veo, pero puedo estar equivocado, es hacer una serie de MyObjects y hacer:

List<MyObject> list = new LinkedList<MyObject>(); 
MyObject[] o = new MyObject[30]; 

for(int i = 0; i < 30; i++) { 
    o[i] = new MyObject(); 
    list.add(o[i]); 
} 
+0

Esa sería mi respuesta, pero decir que el objeto no existe fuera del ciclo es incorrecto, es solo la variable que no es válida fuera del ciclo. El objeto todavía está (referenciado) en la lista. –

+0

Verdadero, significaba por supuesto la variable. Hizo una edición sobre eso. – martiert

2

Lo que podría hacer (aunque eso no tendría mucho sentido tampoco), es usar un mapa en lugar de una lista

Map<String, MyObject> map = new HashMap<String, MyObject>(); 

for (int i = 0; i < 10; i++) { 
    map.put("o" + i, new MyObject()); 
} 
-1

Crear el objeto darle un nombre, añadir sus constructores. luego agregue el nombre del objeto a la lista de arrays.

1
doing it this way: 

List<MyObject> list = new LinkedList<MyObject>(); 

for(int i=0; i<30;i++) 
{ 
list.add(new MyObject()); 
} 

when i try to read the objects from the list they all return the same object with same values for instance variables. 

i have an Emp class with 3 instance variables 
name,dob and salary these values are read from list lst1. 

for(int k=0;k<lst1.size();k++){ 

obj1=new Emp((lst1.get(k).get("name")),(lst1.get(k).get("dob")), 

(lst1.get(k).get("salary"))); 

     lst3.add(k,obj1); 
      } 

but on reading lst3.get(3) or lst3.get(0) 

Emp temp=lst3.get(3); 

String name=temp.name; 

come same as 

Emp temp=lst3.get(0); 

String name=temp.name; 

please provide me with a solution 
Cuestiones relacionadas