Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: miguelmaxs en 24 de Febrero 2021, 10:14
-
Primero que todo hola a todos y gracias por leer. Lo que pasa es que estoy aprendiendo a programar con java y pues estoy comenzando (estoy a nivel de POO herencia e interfaces).
Estoy creando una clase que se llama Validaciones donde tengo métodos para validar datos. Así me ahorro código ya que en muchos ejercicios me piden que cree un array de objetos y que luego sume algun metodo del objeto del array o saque una media , o muestre algun metodo, asi que estoy intentando crear un método en mi clase validaciones para eso pero no sé cómo hacerlo. Esto sería un ejemplo de lo que quiero
public double genericoSumaArray (Object[] x , (aqui quiero poner x.getsueldo o algo asi)) {
double cont=0;
for (int fila=0;fila>x.length;fila++)
cont=x[fila].(aqui quiero poner el getsueldo )+cont;
return cont;
}
-
Mmmhh, creo que te entiendo, pero me temo que no es posible. O yo al menos desconozco como hacerlo.
Tu idea es poder usar un método que reciba un array de clase Object, para poder aplicarlo a cualquier clase: Alumno, Comercial, Persona, Vehiculo,... ya que todos son hijos de Object.
Pero además, hacerle pasar también de algún modo el nombre del método que se ha de usar.
Si quieres sumar edades:
public double genericoSumaArray (Object[] x, getEdad() );
Si quieres sumar sueldos:
public double genericoSumaArray (Object[] x, getSueldo() );
Si quieres sumar el peso de una flota de Camiones:
public double genericoSumaArray (Object[] x, getPeso() );
Etc...
Bien, como idea, es genial... pero que yo sepa, no es posible.
De todos modos, respecto a sumar, siempre son valores int, o double, o float.
Son tipos primitivos, pero que tienen su equivalente en clase POO
int -> Integer
double - Double
float -> Float
Así que puedes hacer que tu método genérico reciba simplemente el array Object, compruebe a que tipo de "instancia" pertenecen, castear el array a la clase correspondiente y hacerla suma.
Este método te sirve para sumar enteros, dobles o float
public double genericoSumaArray (Object[] x) {
double suma = 0;
if (x instanceof Integer[]) {
Integer[] enteros = (Integer[]) x;
for (Integer numInt: enteros)
suma = suma + numInt;
}
else if (x instanceof Float[]) {
Float[] flotantes = (Float[]) x;
for (Float numFlo: flotantes)
suma = suma + numFlo;
}
else if (x instanceof Double[]) {
Double[] dobles = (Double[]) x;
for (Double numDob: dobles)
suma = suma + numDob;
}
return suma;
}
Así si por ejemplo quieres sumar calificaciones, pues en lugar de hacerle llegar un array de Alumno[], construyes un array de Float[] con las calificaciones.
O un Float[] con salarios, o un Integer[] con entradas de cine vendidas, o lo que sea que puedas necesitar.