同僚と私は特定のシナリオについて意見の不一致があります。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クラスのメソッドは静的メソッドを呼び出すことはできますが、まだ(機能的に)直列化可能ですか?それはうまくコンパイルされますが、それでも電線の向こう側に送ることができますか?受信サービスがそのクラスパス上に静的メソッドのクラスを持っていない場合、非直列化に失敗しますか?
どうやってテストしますか?ワイヤを介してオブジェクトを送信するときにシリアル化されるもの、クラスのバイトコード(レシーバがすでにクラスパスにある)、またはオブジェクトの状態(レシーバが知らない) –
受信サービスはどのようにクラスを持ちますが、静的メソッドのクラスはできませんか? (実際に尋ねる)。私は、サービス間でシリアライズ可能クラスをどのように共有するか(それらがすべてライブラリを取得するかどうか、または各サービスでクラスを複製したかどうかにかかわらず)、コードのクラスパスに外部ライブラリを置く必要はないと考えましたさらにコンパイルするには? – Ishnark
これに関する非常に良い説明が見つかりました[Java静的なシリアル化のルール?](https:// stackoverflow。com/questions/6429462/java-static-serialization-rules) –