有没有办法列出myObject
内负责java.lang.IllegalArgumentException: Non-serializable object
异常的所有字段,
我知道这是objectOutputStream.writeObject(myObject);
据我所知,myObject
内的所有对象引用都在实现Serializable
接口。
注意:myObject
有一个很深的参考层次结构,这样做会非常繁琐,无法通过手动找到罪魁祸首。
编辑:我想以编程方式执行此操作。
答案 0 :(得分:0)
如果要以编程方式检查哪个实例字段未实现可序列化使用反射。获取该类的所有字段。现在迭代它并检查它是否是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());
}
}
}
请注意,如果您不想将变量序列化,也可以将变量标记为瞬态变量。所以每个实例变量都不需要是可序列化的类型,只要你不想序列化它。
答案 1 :(得分:0)
异常本身告诉你哪个类不可序列化。
答案 2 :(得分:0)
我希望这可以帮助你,在catch块中
catch(IllegalArgumentException e)
{
Log.e("IllegalArgumentException",e.getMessage().toString());
}
他们将区分其他行的相同例外
答案 3 :(得分:0)
如果异常消息没有告诉您,您可以通过暂时创建字段transient
来搜索它,直到您不再收到消息为止。
transient
关键字告诉序列化库不要序列化用它标记的字段。
你可以进行二进制搜索,一次测试每一半,然后测试一半,直到找到它为止。