Kiểm tra xem Trường có riêng tư không
Bạn có thể lọc các Trường bằng Modifier.isPrivate :
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
Field field = null;
Modifier.isPrivate(field.getModifiers())
trên một Field
đối tượng duy nhất trả về true
nếu trườngprivate
Thu thập tất cả các Trường của một lớp
Để thu thập tất cả các Trường sử dụng:
1) Nếu bạn chỉ cần các trường của lớp mà không cần các trường lấy từ hệ thống phân cấp lớp, bạn có thể chỉ cần sử dụng:
Field[] fields = SomeClass.class.getDeclaredFields();
2) Nếu bạn không muốn phát minh lại bánh xe và nhận tất cả các trường của hệ thống phân cấp lớp, bạn có thể dựa vào Apache Commons Lang phiên bản 3.2+ cung cấp 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));
}
}