Java 在ArrayList中使用第三方接口实现序列化

Java 在ArrayList中使用第三方接口实现序列化,java,serialization,arraylist,Java,Serialization,Arraylist,我有一个ArrayList,其中包含第三方接口的实现。这些实现不实现java.io.Serializable,也不可能让它们实现。我确实看到可以使arrayList暂时化,但不幸的是,这没有效果。当阅读arrayList时,我得到: Caused by: java.io.NotSerializableException: progress.message.jimpl.xmessage.MultipartMessage at java.io.ObjectOutputStream.write

我有一个ArrayList,其中包含第三方接口的实现。这些实现不实现java.io.Serializable,也不可能让它们实现。我确实看到可以使arrayList暂时化,但不幸的是,这没有效果。当阅读arrayList时,我得到:

Caused by: java.io.NotSerializableException: progress.message.jimpl.xmessage.MultipartMessage
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
    at java.util.ArrayList.writeObject(ArrayList.java:762)
在哪里

progress.message.jimpl.xmessage.MultipartMessage extends progress.message.jimpl.Message implements progress.message.jclient.MultipartMessage

这就是ArrayList包含的内容


有什么方法可以防止NotSerializableException发生吗?

创建
MultipartMessage
的子类,并在其中实现
Serializable
,就像在ArrayList中使用它一样

public classs SerializableMultipartMessage extends MultipartMessage implements Serializable {

}

您可以使用aspectj向类添加接口:

创建您自己的wrapperclass,它有一个
多部分消息
,并实现
可序列化
。将
列表
中的所有项目复制到
列表
中,并将其写入流。问题在于,MultipartMessage只是ArrayList可以包含的内容之一。它还可以包含TextMessage、XmlMessage等。遗憾的是,如果您无法访问第三方对象的实例字段(该对象本身不可序列化),那么您将无法使ArrayList可序列化。如果ArrayList的组件类型允许许多实现,其中许多或所有实现都是不可序列化的,那么问题就更加复杂了。@Manu:在包装类中嵌入不可序列化的对象,无论包装类是否可序列化,都不会使不可序列化的包装对象可序列化。@scottb如果不可能,有没有办法防止打印stacktrace?应用程序本身将处理此错误,但日志中将充满这些错误。不幸的是,这是不可能的,因为MultipartMessage是从第三方的另一个类中的方法返回的。在任何情况下,这个解决方案只有在客户端有权访问超类实例字段并且超类有一个无参数构造函数的情况下才有效。看起来很好。我还不知道如何使用它,但我希望能弄明白。好的,万一你需要帮忙给我写个便条。如果答案对你有帮助,请不要忘记勾选:-)我还没有找到如何使用这个。你能给我一个如何开始的提示吗?我通过过滤掉log4j配置中的异常解决了这个问题。在这种情况下,这就足够了。不管怎样,我会记下你的答案,因为它本可以解决这个问题。
public classs SerializableMultipartMessage extends MultipartMessage implements Serializable {

}