有没有办法列出myObject
其中负责java.lang.IllegalArgumentException: Non-serializable object
异常的所有字段,
我知道这是扔在objectOutputStream.writeObject(myObject);
据我所知,里面的所有对象引用myObject
都在实现Serializable
接口。
注意:myObject
有一个很深的参考层次结构,这使得手动查找罪魁祸首变得非常乏味。
编辑:我想以编程方式执行此操作。
有没有办法列出myObject
其中负责java.lang.IllegalArgumentException: Non-serializable object
异常的所有字段,
我知道这是扔在objectOutputStream.writeObject(myObject);
据我所知,里面的所有对象引用myObject
都在实现Serializable
接口。
注意:myObject
有一个很深的参考层次结构,这使得手动查找罪魁祸首变得非常乏味。
编辑:我想以编程方式执行此操作。
如果你想以编程方式检查哪个实例字段没有实现可序列化使用反射。获取该类的所有字段。现在遍历它并检查它是否是 Serializable 的实例。
不过试试下面。请忽略编译错误,因为我没有运行它
public static void main(String[] args) throws Exception {
Object o = new X();
for (Field field : o.getClass().getFields()) {
if (!Serializable.class.isAssignableFrom(field.getType())) {
System.out.println("Field " + field + " is not assignable from type " + o.getClass());
}
}
}
请注意,如果您不想序列化它,也可以将变量标记为瞬态。因此,如果您不想序列化它,则每个实例变量都不必是可序列化的类型。
异常本身会告诉您哪些类不可序列化。
我希望这可以帮助你,在 catch 块
catch(IllegalArgumentException e)
{
Log.e("IllegalArgumentException",e.getMessage().toString());
}
他们将区分其他行的相同异常
如果异常消息没有告诉您,您可以通过临时制作字段来搜索它,transient
直到您不再收到该消息为止。
该transient
关键字告诉序列化库不要序列化用它标记的字段。
您可以对此进行二进制搜索,一次测试每一半,然后测试子半,直到找到它。