1

ObjectStreams を使用して、ソケット接続を介してデータを送受信しようとしています。私はRMIインターフェースを使用しますが、Androidはそれをサポートしていません。私の実装を通じて、ストリームを介して読み取りたい複数の種類のオブジェクトがあります。たとえば、クライアントが指定されたルームから切断したい場合は、Disconnect オブジェクトを送信し、誰かとチャットしたい場合は、ect を介してチャット オブジェクトを送信します。

Javaでオブジェクトを使用するには、次のようにキャストする必要があることを知っています。

joinRoom = (Room) clientInput.readObject();

しかし、ジェネリックオブジェクトを宣言してそれがどのタイプであるかを伝え、それをどのように処理するかを決定する方法はありますか?

多分このように:

Object obj;
obj = (Object) clientInput.readObject();

そして、使用しますか?

if(obj.getClass().equals(Room)){....}
if(obj.getClass().equals(Disconnect)){....}

前もって感謝します。

4

2 に答える 2

3

instanceof代わりに使用してください:

if(obj instanceof Room)
{
    Room room = (Room) obj;
}

instanceof はRTTI (Run Time Type information) を使用して、基本クラス参照 (obj) が実行時に特定の型 (Room) に効果的に対応することを確認します。その後、キャストを安全に実行できます ( に遭遇することはありませんClassCastException)。

于 2012-08-09T20:50:14.410 に答える
0

instaceof を使用して、タイプを確認できます。

. equals() は、文字列をチェックしてそれらが同じかどうかを確認するのに適しています

于 2012-08-09T20:48:36.727 に答える