Seleccionar varios objetos

Ronso

Buenas, estoy probando cosillas con java y no se si esto que quiero hacer es posible, espero que sí... Veréis, digamos que tenemos 4 objetos llamados "objeto1, objeto2, objeto3, objeto4" y quisiera llamar los 4 a la vez con un método que se dedica a guardar la info en un .dat ¿Sería posible?

Ejemplo de lo que quiero:

objeto1.grabar();
objeto2.grabar();
objeto3.grabar();
objeto4.grabar();

Podría hacerse...

objeto*.grabar();

??

Un saludete y gracias!

B

#1 Creo que lo mas fácil es meterlos en una coleccion ya sea array , lista, etc. y recorrerlos.
Ej: foreach para un array

for (Object objeto: objetos) {
     objeto.grabar();
}

donde Object es el tipo de Dato, objeto un nombre que le das para el elemento actual, y objetos la coleccion.

1 3 respuestas
Ronso

#2 No pillo eso... De todas formas eso se recorre como un bucle for? Lo digo porque el método "grabar" imprime "Guardado con éxito" cada vez que se ejecuta, por tanto no me valdría :(

1 respuesta
B

#3 Lo que te he puesto es un bucle for each.
Otra cosa, si el método grabar te imprime guardado con éxito, lo hagas en un bucle o mediante ordenes simple, siempre te va salir...

Por si te sirve de ayuda...http://mundogeek.net/archivos/2009/02/19/bucles-for-each-en-java/

Si no tienes los conceptos claros de Array , colecciones , etc, deberías informarte antes de hacer lo que quieres hacer, ya que es de uso básico.

1 1 respuesta
Ronso

#4 Pero por eso preguntaba si se podia llamar a todos los objetos a la vez en plan como puse :(

Gracias por la ayuda de todas maneras ;)

1 respuesta
Zerokkk

#2 Bastante útil, yo no lo había visto así hasta ahora, la forma más parecida quizá fueran los iteradores.

Yo normalmente meto los objetos en un ArrayList, que me permite que la cantidad de objetos sea dinámica, y luego lo itero en un for:

ArrayList<Objeto> objetos = new ArrayList();

objetos.add(objeto1, objeto2, objeto3);

for(int i=0;i<objetos.size();i++){

 objetos.get(i).  //aquí accedo a métodos y ya hago lo que me dé la gana.

}

Básicamente es así como nos lo han enseñado a hacer xD.

2 1 respuesta
Dostoievski

#6 El for each de #2 usa internamente un iterador. De hecho si modificas la lista mientras se itera en ese bucle te salta una excepción ya que no se está usando el iterador para modificar la lista.

Con tu método eso no ocurre aunque puede llevarte a más de un bug si la modificas y no tienes cuidado.

Respondiendo a #1, no, las listas de java no traen métodos iteren sobre todos sus elementos (bueno con java8 si se puede). Aunque puedes buscar alguna librería que lo haga o implementartela (y así practicas) tu mismo que es bastante sencillo.

1 2 respuestas
wineMan

-

1 1 respuesta
ExTiNcT_

#5 y esta es una de las razones por las que absolutamente jamás debes poner couts ni imprimir absolutamente nada por pantalla en la llamada de los métodos xD

Yo recuerdo a gente en la carrera implementar un método cojonudo y ponerle couts dentro y a tomar por culo el examen.

1 1 respuesta
Ronso

Gracias a todos por las respuestas ;)
Lo estoy haciendo de esta manera por adelantarme como quien dice, en clase vamos muyyyy lentos. Solo hemos visto los arrays y nos han metido con los objetos (nada de colecciones, array.list ni nada de eso).

#8 Es una clase chorra del estilo nombre, edad y con métodos visualizar, leer y guardar.
#9 Sep t_t solo era para que el método tuviera un "eco" de la llamada.
Miraré un poco y a ver si doy con la tecla.

Zerokkk

#7 No sé a qué bugs te refieres, pero en un principio esa forma de iterar los datos de un arraylist no da ningún problema xD.

JuAn4k4

Necesitarías lambda expressions :

http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html

// Approach 9
Collection coll = Arrays.asList(objeto1, objeto2, objeto3, objeto4);
coll.map(o -> function(o) { o.grabar(); });

Aun así, es un misero bucle for.

1 respuesta
pdj

#1 haz el tipico bucle for, while, foreach... que te dicen por arriba.

#12 pero eso no es de java8? o al menos algo así lei de pasada... lo digo porque en clase tendrán 6 o 7 a lo sumo.

#7 no creo que para un ejercicio de clase se necesite un synchronizedset pero si, en caso en que exista concurrencia no vale el foreach.

Usuarios habituales