3

我正在使用Java。我使用套接字建立连接,并使用ObjectOutputStream. 可以发送两种类型的对象,一种是对象,它是A 类的实例,另一种是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)是先发送一些类型字节(0- A1- B)。

于 2013-02-13T20:01:42.937 回答
2

要么使用

if (object instanceof ClassA) {

或者

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

不同之处在于,当 object 是 ClassA 的子类或实现 ClassA (当它是接口时)时,第一个也是 true,而第二个只有当它恰好是那个类时才为 true。

于 2013-02-13T20:04:07.477 回答
0

是的,instanceof 运算符是最好的方法。

于 2013-02-13T20:02:40.710 回答
0

或者,使用纯文本形式的序列化并在序列化的有效负载中嵌入类型的名称(或者可能是反序列化策略)。这样,您可以在反序列化之前检查有效负载。

于 2013-02-13T20:05:08.847 回答