到达 serialPersistentFields 中声明的静态字段
Reaching static field declared in serialPersistentFields
因此 xstream (v1.4.8) 与此行
private Object More ...readField(ObjectStreamField field, Class type, Object instance) {
try {
Field javaField = type.getDeclaredField(field.getName());
more here
尝试到达名为 "list" (field.getName() returns "list")
的字段
private static final ObjectStreamField[] serialPersistentFields = {
new ObjectStreamField("list", VirtualFilePermission[].class)
};
在 org.jboss.vfs.VirtualFilePermissionCollection 中声明但遇到 NoSuchFieldException。这是为什么?
一个ObjectStreamField
描述了一个存储在序列化流中的字段。虽然默认机制将为 class 的每个真实实例字段创建一个 ObjectStreamField
,但存在通过 static final ObjectStreamField[] serialPersistentFields
字段覆盖它的可能性正是为了声明流字段列表不匹配实际实例字段。
这样的字段无法通过仅通过反射读取和写入字段值的默认算法进行处理。相反,需要专用的 writeObject
和 readObject
方法来读取和写入流字段并处理它们的值。
这里的问题是 class VirtualFilePermissionCollection
有这样一个不匹配的字段声明,因为流字段被命名为 list
而实际实例字段被命名为 permissions
, 和一个合适的 readObject
方法(尽管它不必要地使用反射来访问它的字段)但是缺少匹配的 writeObject
方法。由于缺少专用的 writeObject
方法,因此使用默认算法并失败,因为如前所述,字段不匹配。
因此 xstream (v1.4.8) 与此行
private Object More ...readField(ObjectStreamField field, Class type, Object instance) {
try {
Field javaField = type.getDeclaredField(field.getName());
more here
尝试到达名为 "list" (field.getName() returns "list")
private static final ObjectStreamField[] serialPersistentFields = {
new ObjectStreamField("list", VirtualFilePermission[].class)
};
在 org.jboss.vfs.VirtualFilePermissionCollection 中声明但遇到 NoSuchFieldException。这是为什么?
一个ObjectStreamField
描述了一个存储在序列化流中的字段。虽然默认机制将为 class 的每个真实实例字段创建一个 ObjectStreamField
,但存在通过 static final ObjectStreamField[] serialPersistentFields
字段覆盖它的可能性正是为了声明流字段列表不匹配实际实例字段。
这样的字段无法通过仅通过反射读取和写入字段值的默认算法进行处理。相反,需要专用的 writeObject
和 readObject
方法来读取和写入流字段并处理它们的值。
这里的问题是 class VirtualFilePermissionCollection
有这样一个不匹配的字段声明,因为流字段被命名为 list
而实际实例字段被命名为 permissions
, 和一个合适的 readObject
方法(尽管它不必要地使用反射来访问它的字段)但是缺少匹配的 writeObject
方法。由于缺少专用的 writeObject
方法,因此使用默认算法并失败,因为如前所述,字段不匹配。