我试图通过蓝牙在Android上创建一个分布式处理系统,所以我创建了一个实现Serializable的类,创建了一个方法来序列化和反序列化该对象,以便我可以将其作为ByteArray发送。问题是,我需要每个对象都有不同的代码在其他设备上运行。我想重写一个方法,然后在另一个设备上运行该方法,但是当我这样做时,我得到一个NotSerializableException。有什么办法可以补救吗?或者如果没有,是否有另一种方法可以将不同的代码片段发送到其他设备上执行?
默认的序列化机制旨在提供一种传输对象状态的方法,而不是传输派生对象的类的实际逻辑。因此,包含在方法中的代码不是(至少在默认情况下)可序列化的。
解决方案你可以采用许多方法和/或策略来达到或至少接近你所需要的结果;底线是服务器将需要您希望执行的类文件的副本:
动态方法:你可以将"类"或完整的jar动态地作为标准文件发送到服务器,然后使用序列化发送你希望从客户端调用的方法的DETAILS(即名称,签名等)。
静态方法:将应用程序jar的副本放置在服务器的类路径上,作为构建过程的一部分。
当然,你也可以实现Externalizable接口来定义你自己的序列化机制和语义。