利用 Java 的反射机制来获取泛型类中的属性及其对应的值。具体实现方式如下:
import java.lang.reflect.Field;
public class GenericClassUtil<T> {
// 泛型对象
private T obj;
public GenericClassUtil(T obj) {
this.obj = obj;
}
// 循环出泛型对象的属性和属性值
public void printObjectFields() throws IllegalAccessException {
// 获取当前类的 Class 对象
Class clazz = obj.getClass();
// 获取当前对象所有的属性,包括父类中的属性
Field[] fields = clazz.getDeclaredFields();
for (Field f : fields) {
// 设置可访问私有属性,默认是不可访问的
f.setAccessible(true);
// 获取属性名
String fieldName = f.getName();
// 获取属性值
Object fieldValue = f.get(obj);
System.out.println(fieldName + ":" + fieldValue);
}
}
}
这里我们创建了一个 GenericClassUtil 类,并将泛型对象传入构造函数。在 printObjectFields 方法中,我们首先获取对象的 Class 对象,然后通过调用 getDeclaredFields() 方法获取对象所有的属性,并使用增强 for 循环方式遍历属性数组。在循环过程中,我们首先设置对象属性为可访问(即使是私有属性也可以被访问),然后分别获取属性名和属性值,并输出到控制台。
以下是一个示例代码来调用 GenericClassUtil 类的方法:
public static void main(String[] args) throws IllegalAccessException {
// 创建一个 User 对象
User user = new User();
user.setId(1L);
user.setName("张三");
user.setAge(20);
// 创建 GenericClassUtil 类,传入 User 类型的对象
GenericClassUtil<User> genericClassUtil = new GenericClassUtil<>(user);
// 调用 printObjectFields 方法输出所有属性和属性值
genericClassUtil.printObjectFields();
}
在这个示例代码中,我们创建了一个 User 对象,并设置了其属性值。接着,我们创建了一个 GenericClassUtil 类对象,将 User 类型的泛型对象传入构造函数,最后调用 printObjectFields 方法即可循环出对象的所有属性及其对应的值。