gpt4 book ai didi

java - 如何让 Java 反射(reflect)到父类(super class)中的点字段?不仅仅是实际的类(class)

转载 作者:IT老高 更新时间:2023-10-28 20:57:00 25 4
gpt4 key购买 nike

我最近稍微改变了我的架构,所以我的类继承自一个父类(super class),问题是我使用 Java 反射生成审计日志的比较方法现在只循环遍历子类的字段,而不是父类(super class),有没有办法获得所有的FIELDS?还是我需要将其转换为父类(super class).....?

下面是我的方法:

public static <T> String GenerateChangeLogForEntity(T old, T updated) {
String text = "";
try {
Field[] fields = old.getClass().getDeclaredFields();
if(fields != null) {
BaseController.getLogger().info("Z1 num fields:"+fields.length);
for (Field field : fields) {
if(field.isAnnotationPresent(Column.class)) {
String fieldName = field.getName();
BaseController.getLogger().info(field.getName());
if(field.isAnnotationPresent(Variation.class)) {
Variation v = field.getAnnotation(Variation.class);
fieldName = v.friendlyName();
}
field.setAccessible(true);
if(field.get(old) != null && field.get(updated) != null) {
if(!(field.get(old)).equals(field.get(updated))) {
text += "<p><span class=\"field-name\">"+fieldName+"</span> changed from: <strong>"+GetFriendlyFieldValueForChangeLog(field.get(old))+"</strong> to: <strong>"+GetFriendlyFieldValueForChangeLog(field.get(updated)) + "</strong></p>";
}
}
if(field.get(old) == null && field.get(updated) != null) {
text += "<p><span class=\"field-name\">"+fieldName+"</span> changed from: <strong>empty</strong> to: <strong>"+GetFriendlyFieldValueForChangeLog(field.get(updated)) + "</strong></p>";
}
if(field.get(old) != null && field.get(updated) == null) {
text += "<p><span class=\"field-name\">"+fieldName+"</span> changed from: <strong>"+GetFriendlyFieldValueForChangeLog(field.get(updated))+"</strong> to <strong>empty</strong>" + "</p>";
}
field.setAccessible(false);
}
}
}
} catch(IllegalAccessException e) {}
return text;
}

最佳答案

你可以使用this.getClass().getSuperClass()直到这个getSuperClass()方法返回null来获取父字段。

因此,最好将代码分解。实现一个将 Field 列表作为参数并在其中执行逻辑部分的方法,以及一个通过 while(superClass != null) 搜索字段的主要方法循环。

关于java - 如何让 Java 反射(reflect)到父类(super class)中的点字段?不仅仅是实际的类(class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10580866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com