Foros del Web » Programación para mayores de 30 ;) » Java »

Generalizar una extencion de clases

Estas en el tema de Generalizar una extencion de clases en el foro de Java en Foros del Web. Hola a todos sucede que tengo varias clases que extienden de CommonData, no se bien como funciona esto del extends en java ya que soy ...
  #1 (permalink)  
Antiguo 14/06/2011, 22:48
 
Fecha de Ingreso: abril-2003
Ubicación: Santiago
Mensajes: 212
Antigüedad: 20 años, 11 meses
Puntos: 0
Generalizar una extencion de clases

Hola a todos sucede que tengo varias clases que extienden de CommonData, no se bien como funciona esto del extends en java ya que soy nuevo en este lenguaje pero me gustria generar una clase generica que permita compartir ciertas funciones sin la necesidad de estar creando una clase para cada objeto ejemplo este porblema lo tengo por lo siguinete estoy trabajando con hibernate y tengo la siguinete duplicidad de codigo

public Collection<AtencionDTO> findByCriteria(
final Criteria criteria) {
return getDAOSupport().findByCriteria(criteria);
}

public AtencionDTO selectByID(final int pk) {
return (AtencionDTO) getDAOSupport().findByPrimaryKey(
AtencionDTO.class, pk);
}

public AtencionDTO add(final AtencionDTO mant) {
if (mant == null) {
throw new IllegalArgumentException("Parameter can't be null");
}
getDAOSupport().save(mant);
return mant;
}

/*********************************************/

public Collection<InsumoDTO> findByCriteria(
final Criteria criteria) {
return getDAOSupport().findByCriteria(criteria);
}

public InsumoDTO selectByID(final int pk) {
return (InsumoDTO) getDAOSupport().findByPrimaryKey(
InsumoDTO.class, pk);
}

public InsumoDTO add(final InsumoDTO mant) {
if (mant == null) {
throw new IllegalArgumentException("Parameter can't be null");
}
getDAOSupport().save(mant);
return mant;
}

si se ven las funciones hacen lo mismo el unico problema es que por devolver tipo de objetos distintos necesito crear cada funcion y su respectiva clase data es por eso que me gustria saber si se puede hacer algo generico que me permita obtener los resultados y hacer la consulta de forma generica??????

public Collection<ObjetoCualquiera > findByCriteria(
final Criteria criteria) {
return getDAOSupport().findByCriteria(criteria);
}

public ObjetoCualquiera selectByID(final int pk) {
return (ObjetoCualquiera ) getDAOSupport().findByPrimaryKey(
ObjetoCualquiera .class, pk);
}

public ObjetoCualquiera add(final InsumoDTO mant) {
if (mant == null) {
throw new IllegalArgumentException("Parameter can't be null");
}
getDAOSupport().save(mant);
return mant;
}
  #2 (permalink)  
Antiguo 15/06/2011, 12:18
 
Fecha de Ingreso: junio-2011
Mensajes: 16
Antigüedad: 12 años, 9 meses
Puntos: 2
Respuesta: Generalizar una extencion de clases

Intenta realizarlo con Interface http://www.arrakis.es/~abelp/ApuntesJava/Interfaces.htm, ya que ahy solo declaras los metodos y los mandas a invocar, ademas q te serviria para cualquier operaciones q necesites.

Saludos
  #3 (permalink)  
Antiguo 15/06/2011, 13:55
Avatar de jahepi
Colaborador
 
Fecha de Ingreso: diciembre-2004
Ubicación: Querétaro
Mensajes: 1.124
Antigüedad: 19 años, 3 meses
Puntos: 43
Respuesta: Generalizar una extencion de clases

Hola Goomba !

Recuerda que en Java toda clase hereda de la clase base Object, así que puedes hacer los métodos de tu clase tan genéricos como tu lo desees.

Te pongo de ejemplo este método:
Código:
public Collection<Object> findByCriteria(final Criteria criteria) {
    return getDAOSupport().findByCriteria(criteria);
}
El método me devuelve una colección de objetos, deberás hacer el casting al tipo de dato en específico que utilizarás.

También si ves que hay duplicación de código, delega esa responsabilidad a otra clase y reutilízala ya sea por composición o herencia.

Un saludo y suerte !
__________________
Una contraseña es como la ropa interior. No deberías dejarlas afuera a la vista de otras personas, deberías cambiarla regularmente, y ni se te ocurra prestarla a extraños.

Etiquetas: clases, extencion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:06.