2016-10-05 6 views
2

シリアル化されたファイルからオブジェクトを読み込んでいます。結果をキャストしなければならないという事実は本当に嫌いです。Java - キャストせずにシリアル化されたオブジェクトを読み取ることは可能ですか?

vars = (HashMap<String, Integer>) out.readObject(); 

私はキャストを嫌うようなタイプの情報のファンです。シリアライズされたファイルからどのタイプを読み込むべきかを明示的に伝えることは可能ですか?

+0

他にも方法はありません。 – Grzesiek

+0

いいえ、それに対処してください。 –

答えて

4

ObjectInputStreamは一般的なタイプではなく、一般的な方法を提供しません。

read[primitive]の具体的な方法がありますが、実際のオブジェクトではreadObjectしか提供されていません - Objectを返します。

もちろん、Java独自のSerializableまたはExternalizableインターフェイスを使用する必要がなく、特定のフレームワーク(Jacksonなど)でシリアル化する場合は、逆シリアル化時に明示的ダウンキャストを必要としないメソッドを使用できます。

ObjectInputStreamfinalではなく、あなた自身のいくつかのreadTypedObjectメソッドを呼び出すときに、一般的なクラスやメソッドを提供して鋳造することを防止する可能性があり、独自の実装を提供するためにそれを拡張することができます。

あなたは、あなたは読み取りがあなたのパラメータ化タイプに割り当てることができるものであることを確認したオブジェクトを作成するために、使用して独自のObjectInputStreamの実装を初期化Class<T>readClassDescriptor()を比較することができます。

readObjectを無効にしたくないので、とにかくいつでもTにキャストしてしまいます。

TL; DR、私の意見ではあまりにも多くの労力と複雑さ、私はちょうど受信側で鋳造に行くだろう。

関連する問題