一位同事和我對特定場景有不同意見。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) –