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;
}
Top comments (0)