2013-01-28 14 views
5

​​をネットワーク経由で送信しようとしています。私はオブジェクトとしてそれをキャストし、私はこの方法で送信しました。オブジェクトを元のタイプにキャスト

ネットワークに渡されているアイテムをモデル化する最も良い方法は、それが何であるかを事前に知らないので、オブジェクトを通して行うことだと思います(この例ではコレクションですが、地図やあなたが考えることができる他のもの)。これは、ソケットがCで動作しているように、受信側と送信側だけが送受信しているものを知り、オブジェクトを適切にキャストするのに対し、接続はバイトを気にして適切に送信します。

しかし、オブジェクトを受け取ったときに、それをcollection<myObject>にキャストしようとすると、危険な型キャストが警告されます。 @suppressWarningsを追加することもできますが、この警告を避けるために、このキャストを実行する最善の方法は何でしょうか?

おかげ

+2

キャストが実際に安全だと確信しているのなら、適切な解決策は実際には '@ SuppressWarnings'です。他の解決方法は、警告をどこか他の場所で抑制するだけです。 –

+0

私は私を助けるはずのツールに縛られるのは好きではありませんが、実際には私は 'ソナー'を使用しています、そして、私が@SuppressWarningsを追加しても、まだソナーにエラーがあります。ソナーの警告も無効にする方法はありますか? – shkra19

+0

同じ理由でSONARの警告が表示されますか?警告は何を言いますか? –

答えて

3

ます(ほとんどのJava、けれども)はあなたが受け取るオブジェクトの種類を知っていないとして、安全にキャストすることは不可能です。あなたが行うことができます

シング:

  • あなたはそれはあなたが、それはたぶん、(余分確認するために)ClassCastExceptionをキャッチするtry-catchブロックを追加
  • だと思うオブジェクトです本当に確認する必要があり
  • そして、最終的には、Javaの安全性チェックを上書きしたいと(あなたがよりよく知っていると思うので)、@SuppressWarnings注釈を追加
+0

また、インスタンス。 – sdasdadas

+0

@sdasdadasは動作しません。データを受け取るときに 'Object'インスタンスしか作成できないからです。あなたが得るものが分かっていると思ったら、別の型のオブジェクトを作成できますが、もう 'instanceof'は必要ありません。 – Veger

+0

私は彼がこのようなものを探していたという印象を受けました:http://stackoverflow.com/questions/2651632/how-to-check-if-an-object-is-a-collection-type-in​​-javaおそらく私はその質問を誤解したでしょう。 – sdasdadas

1

は、いくつかのintermの使用を検討してくださいJSONやXMLのようなシリアライゼーションのediateフォーマットJSONへのオブジェクトのマーシャリングとアンマーシャリングのためのライブラリはたくさんあります。例えば、GSON。あなたは自由のために何を得るのかは、言語の相互運用性です。その一方で、どの言語でもプログラムが存在する可能性があるからです。

+1

+1:コンパクトでクリーンでシンプルな – amphibient

+0

私はjsonやxmlを使っているのではありません(私は既にプロジェクトの別の部分でこれを行っています)。しかし、それはプログラマーがネットワークをコーディングするとき一部、私は渡されているオブジェクトの種類を知りません(送信者/受信者のみが知っています)。オブジェクトではない場合、どのようなクラスを使用しますか? – shkra19

+0

-1はOPの問題に対処しておらず、唯一の効果は他の場所で安全でないキャストを移動させることです。 –

関連する問題