domingo, 23 de mayo de 2021

Java: Gettear y setear campos a objetos genéricos mediante Reflection

import java.lang.reflect.Field;
import java.text.NumberFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;

 

/**
     * Método de reflexión que busca por nombre de atributo en un objeto ese atributo
     * y devuelve su valor
     *
     * @param nombreAtributo
     * @param objetoDondeBuscar
     * @return
     */
    public static String buscaParametroPorNombre(final String nombreAtributo, final Object objetoDondeBuscar) {
        Class<?> c = objetoDondeBuscar.getClass();
        Field f = null;
        String result = null;
        do {
            try {
                f = c.getDeclaredField(nombreAtributo);
            } catch (NoSuchFieldException e) {
                log.debug("No se encuentra el campo: " + nombreAtributo);
            }

            if (f != null) {
                try {
                    f.setAccessible(true);
                    result = f.get(objetoDondeBuscar) != null ? String.valueOf(f.get(objetoDondeBuscar)) : null;
                } catch (IllegalAccessException e) {
                    log.debug("No se encuentra el campo: " + nombreAtributo, e);
                }
            }
            c = c.getSuperclass();
        } while ((c != null) && (c != Object.class));

        return result;
    }

    /**
     * Método de reflexión que setea el valor de un atributo en un objeto
     *
     * @param nombreAtributo
     * @param objetoDondeBuscar
     * @param valorAtributo
     * @return
     */
    public static String setParametroPorNombre(final String nombreAtributo, final Object objetoDondeBuscar,
                                               final String valorAtributo) {
        Class<?> c = objetoDondeBuscar.getClass();
        Field f = null;

        try {
            f = c.getDeclaredField(nombreAtributo);
        } catch (NoSuchFieldException e) {
            log.debug("No se encuentra el campo: " + nombreAtributo);
        }
        if (f != null) {
            try {
                f.setAccessible(true);
                f.set(objetoDondeBuscar, valorAtributo);
            } catch (IllegalAccessException e) {
                log.debug("Error al setear el atributo: " + nombreAtributo + "con valor: " + valorAtributo, e);
            }
        }
        return "OK";
    }

martes, 18 de mayo de 2021

Ordenar una lista de objetos en Java

lstPersonasCuentaDo.sort(Comparator.comparing(Persona::getNombreCompleto, Comparator.nullsLast(Comparator.naturalOrder())));