下面的示例使用反射获取类对象的字段。我们将获取字段名称及其对应的类型。下面显示了三种可用于获取对象字段的方式:
Class.getDeclaredFields()
Class.getFields()
Class.getField(String)
package org.nhooo.example.lang; import java.util.Date; import java.lang.reflect.Field; public class GetFields { public Long id; protected String name; private Date birthDate; Double weight; public static void main(String[] args) { GetFields object = new GetFields(); Class clazz = object.getClass(); // 获取所有对象字段,包括公共的,受保护的,打包的和私有的 // 访问字段。 Field[] fields = clazz.getDeclaredFields(); System.out.println("Number of fields = " + fields.length); for (Field field : fields) { System.out.println("Field name = " + field.getName()); System.out.println("Field type = " + field.getType().getName()); } System.out.println("n----------------------------------------n"); // 获取所有对象可访问的公共字段。 fields = clazz.getFields(); System.out.println("Number of fields = " + fields.length); for (Field field : fields) { System.out.println("Field name = " + field.getName()); System.out.println("Field type = " + field.getType().getName()); } System.out.println("n----------------------------------------n"); try { // 使用公共访问修饰符获取字段名称ID Field field = clazz.getField("id"); System.out.println("Field name = " + field.getName()); System.out.println("Field type = " + field.getType().getName()); } catch (NoSuchFieldException e) { e.printStackTrace(); } } }