我正在编写一个简单的java类,它使用反射API来查找java.lang.class中声明的字段。以下是我编写的java代码。
Field[] fields = String.class.getDeclaredFields();
for (Field f : fields) {
System.out.println("Field name: " + f.getName());
}
运行此程序时,我得到以下输出。
Field name: serialVersionUID
Field name: CASE_INSENSITIVE_ORDER
Field name: ascii
Field name: stringArray
Field name: stringArraySize
Field name: enableCopy
Field name: value
Field name: offset
Field name: count
Field name: hashCode
Field name: hashCode32
Field name: seed
Field name: startCombiningAbove
Field name: endCombiningAbove
Field name: upperValues
Field name: serialPersistentFields
当我查看String类的源代码时,我发现在API中只为该类定义了6个字段。
我无法确定输出中这些附加字段的来源。请在这里帮忙。
答案 0 :(得分:0)
您的代码没有任何问题;当我运行它时,我得到了预期的输出:
Field name: value
Field name: hash
Field name: serialVersionUID
Field name: serialPersistentFields
Field name: CASE_INSENSITIVE_ORDER
我猜你正在使用一个非Oracle Java虚拟机添加(在其捆绑的库中或通过一些运行时魔术)向String
类添加一些非标准字段。