Перевірте, чи не є поле приватним
Ви можете відфільтрувати поля за допомогою Modifier.isPrivate :
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
Field field = null;
Modifier.isPrivate(field.getModifiers())
на одному Field
об’єкті, який повертається, true
якщо поле єprivate
Зберіть усі поля класу
Щоб зібрати всі поля, використовуйте:
1) Якщо вам потрібні лише поля класу без полів, взятих з ієрархії класів, ви можете просто використовувати:
Field[] fields = SomeClass.class.getDeclaredFields();
2) Якщо ви не хочете заново винаходити колесо і отримувати всі поля ієрархії класів, ви можете покластись на Apache Commons Lang версії 3.2+, яка передбачає FieldUtils.getAllFieldsList
:
import java.lang.reflect.Field;
import java.util.AbstractCollection;
import java.util.AbstractList;
import java.util.AbstractSequentialList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import org.apache.commons.lang3.reflect.FieldUtils;
import org.junit.Assert;
import org.junit.Test;
public class FieldUtilsTest {
@Test
public void testGetAllFieldsList() {
final List<Field> allFields = FieldUtils.getAllFieldsList(LinkedList.class);
final List<Field> allFieldsClass = Arrays.asList(LinkedList.class.getFields());
final List<Field> allFieldsParent = Arrays.asList(AbstractSequentialList.class.getFields());
final List<Field> allFieldsParentsParent = Arrays.asList(AbstractList.class.getFields());
final List<Field> allFieldsParentsParentsParent = Arrays.asList(AbstractCollection.class.getFields());
Assert.assertTrue(allFields.containsAll(allFieldsClass));
Assert.assertTrue(allFields.containsAll(allFieldsParent));
Assert.assertTrue(allFields.containsAll(allFieldsParentsParent));
Assert.assertTrue(allFields.containsAll(allFieldsParentsParentsParent));
}
}