O lo que es lo mismo, mediante Reflection, la obtención de todos los campos de una clase incluidos los de la clase padre.

Supongamos que tenemos dos clases, una clase A, y una clase B que extiende de A.

public class A {
    private String attriA;
}

public class B extends A {
    private String attriB;
}

Si sólo quisiera obtener los campos de la clase B, sin los de la clase padre A, lo haríamos sencillamente en una supuesta ejecución.

B b = new B();
Class klassB = b.getClass();

y para obtener los campos:

Fields[] fieldB = klassB.getDeclaredFields();

Ahora bien, al tener un padre, tendremos que recorrer también los campos del padre, que solucionamos con implementando un método que nos devolverá los campos del padre y del hijo.

Sólo los campos del padre.

Fields[] fieldA = klassB.getSuperclass()getDeclaredFields();

Y para obtener todos los campos, añadimos a un ArrayList tanto los del hijo como los del padre (si lo tuviera)

 List<Field> fields = new ArrayList<Field>();
        fields.addAll(Arrays.asList(klass.getDeclaredFields()));
        if (klass.getSuperclass() != null) {
            fields.addAll(Arrays.asList(getAllFields(klass.getSuperclass())));
        }

Hay varias formas de implementar esta funcionalidad.

Tenemos nuestra fecha de java.util.Date, bien de una instancia nueva (no tendría sentido) o de que nos llegue como parámetro de alguna función:

java.util.Date utilDate = new java.util.Date();

Obtenemos el tipo de java.sql.Date con la transformación:

java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());

O bien, con la clase Calendar de java.util:

java.util.Calendar cal = Calendar.getInstance();
  cal.setTime(utilDate);
  cal.set(Calendar.HOUR_OF_DAY, 0); 
  cal.set(Calendar.MINUTE, 0);
  cal.set(Calendar.SECOND, 0); 
  cal.set(Calendar.MILLISECOND, 0);  
java.sql.Date sqlDate = new java.sql.Date(cal.getTime().getTime());

Y si queremos el resultado inverso, es decir, de java.sql.Date a java.util.Date :

        java.sql.Date sqlDate = new Date(utilDate.getTime());    
Copyright © 2016 runando