3

私はJavaを使用しています。ソケットを使用して接続し、を使用してサーバーオブジェクトから送信しますObjectOutputStream。送信できるオブジェクトには2つのタイプがあります。1つはクラスAのインスタンスであるオブジェクトであり、もう1つはクラスBのインスタンスであるオブジェクトです。クライアント側でObjectを読み取った場合、それがクラスAのインスタンスなのかクラスBのインスタンスなのかをどのように判断できますか?

PS:私はクライアント側でもこれらのクラスにアクセスしています。

4

4 に答える 4

3

instanceofシンプルな解決策は、入力時に演算子を使用することです。

final Object obj = inputStream.readObject();
if(obj instanceof A) {
  final A a = (A)obj;
} else {
  final B a = (B)obj;
}

少し冗長な解決策 (ただし、回避) は、最初に型バイト ( - 、- )instanceofを送信することです。0A1B

于 2013-02-13T20:01:42.937 に答える
2

どちらかを使用

if (object instanceof ClassA) {

また

if (object.getClass() == ClassA.class) {

違いは、オブジェクトが ClassA のサブクラスである場合、または ClassA を実装している場合 (インターフェイスの場合) に最初の値も真になり、2 番目の値はまさにそのクラスである場合にのみ真になることです。

于 2013-02-13T20:04:07.477 に答える
0

はい、instanceof演算子が最良の方法です。

于 2013-02-13T20:02:40.710 に答える
0

または、プレーンテキスト形式のシリアル化を使用し、シリアル化されたペイロードに型の名前 (または逆シリアル化戦略) を埋め込みます。このようにして、デシリアライズする前にペイロードを検査できます。

于 2013-02-13T20:05:08.847 に答える