一位同事和我对特定场景有不同意见。Serializable对象内的静态方法调用
我们有一个Serializable
对象,它有一个toString()
方法。这个toString()
通过调用Apache的ReflectionToStringBuilder
来实现。类似这样的:
public class Foo implements Serializable {
// bunch of instance variables, getters and setters ...
@Override
public String toString() {
return ReflectionToStringBuilder.toString(this);
}
}
我们无法控制这些对象如何传递。在我们特定的应用程序中,我们可以通过RMI调用,HTTP POST(在写成JSon字符串之后),通过JMS或通过其他协议传递它们。
现在,JSon字符串大小写应该不重要,因为它将以字符串形式发送,因此toString()
方法的实现细节无关紧要。但是对于其他一些协议,我们希望序列化对象本身。
Serializable类中的方法是否可以调用静态方法,并且仍然可以(功能上)可序列化?它编译得很好,当然 - 但它可以通过电线发送吗?如果接收服务的类路径中没有静态方法的类,它是否会失败反序列化?
如何测试它?当通过线路发送对象时,序列化了什么,类的字节码(接收器已经在其类路径中),还是对象的状态(接收者不知道)? –
接收服务如何获得类而不是静态方法的类? (实际上是问)。我认为,无论您如何在服务之间共享Serializable类(无论它们是否都获取库,或者是否重复了每个服务中的类),都不会在代码的类路径中存在任何外部库甚至编译? – Ishnark
很好的描述可以在[Java静态序列化规则?](https:// stackoverflow。com/questions/6429462/java-static-serialization-rules) –