DEV Community

Query Filter
Query Filter

Posted on

get fields

private List getFields(Object obj) {
List results = new ArrayList<>();

if (obj == null) return results;

Class<?> cls = obj.getClass();

// 1. Handle arrays
if (cls.isArray()) {
    int length = Array.getLength(obj);
    for (int i = 0; i < length; i++) {
        Object element = Array.get(obj, i);
        if (element != null) results.add(element);
    }
    return results;
}

// 2. Handle collections
if (obj instanceof Collection<?>) {
    for (Object element : ((Collection<?>) obj)) {
        if (element != null) results.add(element);
    }
    return results;
}

// 3. Handle maps
if (obj instanceof Map<?, ?>) {
    for (Map.Entry<?, ?> entry : ((Map<?, ?>) obj).entrySet()) {
        if (entry.getKey() != null) results.add(entry.getKey());
        if (entry.getValue() != null) results.add(entry.getValue());
    }
    return results;
}

// 4. Regular object fields
while (cls != null) {
    for (Field f : cls.getDeclaredFields()) {
        if (Modifier.isStatic(f.getModifiers())) continue;
        f.setAccessible(true);
        try {
            Object val = f.get(obj);
            if (val != null) results.add(val);
        } catch (Throwable ignored) {}
    }
    cls = cls.getSuperclass();
}

return results;
Enter fullscreen mode Exit fullscreen mode

}

Top comments (0)