シリアル化されたファイルからオブジェクトを読み込んでいます。結果をキャストしなければならないという事実は本当に嫌いです。Java - キャストせずにシリアル化されたオブジェクトを読み取ることは可能ですか?
vars = (HashMap<String, Integer>) out.readObject();
私はキャストを嫌うようなタイプの情報のファンです。シリアライズされたファイルからどのタイプを読み込むべきかを明示的に伝えることは可能ですか?
シリアル化されたファイルからオブジェクトを読み込んでいます。結果をキャストしなければならないという事実は本当に嫌いです。Java - キャストせずにシリアル化されたオブジェクトを読み取ることは可能ですか?
vars = (HashMap<String, Integer>) out.readObject();
私はキャストを嫌うようなタイプの情報のファンです。シリアライズされたファイルからどのタイプを読み込むべきかを明示的に伝えることは可能ですか?
ObjectInputStream
は一般的なタイプではなく、一般的な方法を提供しません。
read[primitive]
の具体的な方法がありますが、実際のオブジェクトではreadObject
しか提供されていません - Object
を返します。
もちろん、Java独自のSerializable
またはExternalizable
インターフェイスを使用する必要がなく、特定のフレームワーク(Jacksonなど)でシリアル化する場合は、逆シリアル化時に明示的ダウンキャストを必要としないメソッドを使用できます。
注
ObjectInputStream
はfinal
ではなく、あなた自身のいくつかのreadTypedObject
メソッドを呼び出すときに、一般的なクラスやメソッドを提供して鋳造することを防止する可能性があり、独自の実装を提供するためにそれを拡張することができます。
あなたは、あなたは読み取りがあなたのパラメータ化タイプに割り当てることができるものであることを確認したオブジェクトを作成するために、使用して独自のObjectInputStream
の実装を初期化Class<T>
でreadClassDescriptor()
を比較することができます。
readObject
を無効にしたくないので、とにかくいつでもT
にキャストしてしまいます。
TL; DR、私の意見ではあまりにも多くの労力と複雑さ、私はちょうど受信側で鋳造に行くだろう。
他にも方法はありません。 – Grzesiek
いいえ、それに対処してください。 –