我正在开发一个使用ASM-5读取类文件并生成UML图的项目。我在测试中遇到了一个问题,看看我们是否正确阅读。
我在String类上测试它。文档中显示的唯一字段是CASE_INSENSITIVE_ORDER。这看起来很可疑,但我编写了测试来检查该字段是否只读取了该字段,并显示了5个字段:value:char [],hash:int,serialVersionUID:long,serialPersistentField:ObjectStreamField和CASE_INSENSITIVE_ORDER:比较器。
这4个额外字段来自哪里,为什么它们不在oracle文档中?当我尝试使用refection来查看字符串类所具有的字段时,我也无法访问它们(我只能看到CASE_INSENSITIVE_ORDER)。这似乎应该更好地记录下来。
答案 0 :(得分:0)
在Java 8中(它在其他版本中有所不同),String
具有以下字段(为方便起见而对齐):
public static final Comparator<String> CASE_INSENSITIVE_ORDER;
private static final ObjectStreamField[] serialPersistentFields;
private static final long serialVersionUID;
private int hash;
private final char[] value;
如您所见,其中只有一个是public
,其中3个是static
。
根据您希望显示的UML图表,您还需要找到private
字段,并且可能要排除static
字段。
实际上,良好的编程实践意味着您永远不会找到public
,非static
字段。