Java 有没有办法知道Android上包裹中的对象是什么类型的?
我正在制作一个Android应用程序,它通过网络以字节数组的形式发送两种类型的对象,这两种对象实现了可包裹接口(让我们称它们为objectA和objectB)。但在接收端,我需要知道包裹中到达的是哪种类型的物品。readValue()方法只返回Object,因此在接收端我不知道应该重新创建objectA或objectB哪个对象。如何做到这一点?地块中是否有描述原始对象类型的元数据 编辑:语言是Java 编辑:添加了示例代码Java 有没有办法知道Android上包裹中的对象是什么类型的?,java,android,networking,serialization,parcelable,Java,Android,Networking,Serialization,Parcelable,我正在制作一个Android应用程序,它通过网络以字节数组的形式发送两种类型的对象,这两种对象实现了可包裹接口(让我们称它们为objectA和objectB)。但在接收端,我需要知道包裹中到达的是哪种类型的物品。readValue()方法只返回Object,因此在接收端我不知道应该重新创建objectA或objectB哪个对象。如何做到这一点?地块中是否有描述原始对象类型的元数据 编辑:语言是Java 编辑:添加了示例代码 ObjectA objA=新的ObjectA(“uid”,“descri
ObjectA objA=新的ObjectA(“uid”,“description”);
字节[]字节=parceletil.toBytes(objA)//这模拟了发送
重建的对象=Parceletil.rebuildFromBytes(字节)//这里我不知道我在重建什么,objectA还是objectB
if(地块的重建实例){
地块p=(地块)重建;
ObjectB oB=(ObjectB)p.readValue(ObjectB.class.getClassLoader());
if(oB.getUid()==null){
ObjectA oA=(ObjectA)p.readValue(ObjectA.class.getClassLoader());//这也将充满空值
}
}
我想您可以访问可能是您收到的对象类型的类。在Java中,您只需使用instanceof运算符检查您接收到的对象:
if (yourObject instanceof YourClass) {
// Your code here
}
对于地块,有一个readValue方法可接受类加载器,请使用类加载器调用此方法,它应该可以工作,例如:
Point pointFromParcel = (Point) parcel.readValue(Point.class.getClassLoader());
如果您不知道包装器类将是什么对象,您可以创建一个包装器类,其中包含ObjectA或ObjectB以及一个字段,以指示包装器当前包含的对象。这是java还是kotlin?很抱歉,我忘了提及它,我将更新postYes,但是我收到的对象是字节数组,在我解组后,它将是一个包对象,因此instanceof将始终为false,然后你需要提供一个类加载器并调用.readValue。在你的包上,问题是我不知道哪个对象作为包(objectA或objectB)到达我这里。如果我将objectA的类加载器传递给parcel.readValue,那么它将创建对象,但是如果它是错误的,那么它将被null值填充,然后如果我检查新创建的对象是否包含null,如果它包含null,则结束,那么我将无法使用ObjectB的类加载器再次读取包裹。我正在向问题中添加示例代码,您可以尝试使用Object.class.getClassLoader()然后使用instanceof进行检查吗?或者,您可以创建一个包含ObjectA或ObjectB的包装器类,并创建一个字段来指示包装器当前包含的对象。如果我使用object.getClass.getClassLoader(),那么它将返回一个整数类,既不是ObjectA也不是ObjectB(只有getClass.getClassLoader()也是如此)编辑:我已经成功地用你建议的包装器类解决了我的问题,谢谢!你能编辑答案以包含解决方案吗?