假设我有以下两个类(class):
public class A {
private String field1;
private B field2;
}
public class B {
private String field3;
}
我想要做的是使用 Java Reflection 从类 A 中获取所有字段和所有子字段,并从中创建一个哈希值。在这个例子中,我会得到一个字符串列表,其中包含 ["field1", "field2", "field3"]
,并且我会对整个列表进行哈希处理。
如果它有帮助的话,我这样做的原因是因为我有一个 A
的 MongoDB 集合。但是,每隔一段时间,我就会向 A
或 B
添加新字段,并且在这种情况发生时,我需要使用新字段刷新整个集合。为此,我需要在一个单独的集合中跟踪我是否已经刷新了 A
的集合的当前结构。最简单的方法是仅散列其字段和子字段名称。
最佳答案
处理评论,getAllFieldsList
返回List<Field>
所以你应该能够迭代或递归 List
然后调用Field.getType()
返回 Class
。现在调用getAllFieldsList
再次。这应该可以让您从 A 类遍历,然后获取有关 B 类的信息。
另一个想法可能是使用 JSON_STYLE 并调用 https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/builder/ReflectionToStringBuilder.html#ReflectionToStringBuilder-java.lang.Object-org.apache.commons.lang3.builder.ToStringStyle-
。这将递归并打印出代表 A
的 JSON然后您可以解析 JSON 并检查字段名称。
另一种途径可能是在编译时或打包时处理这个问题。除非您使用其他反射或面向方面的编程技术,否则您的类只会在编译时的开发过程中发生变化。在构建或 CI/CD 流程中检测更改,然后将这些更改输入 MongoDB 可能更有意义。
关于java - 如何获取 Java 类结构的哈希值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70366817/