Java 如何识别costum arraylist中包含的对象类型?

Java 如何识别costum arraylist中包含的对象类型?,java,android,object,arraylist,Java,Android,Object,Arraylist,我有一个服务器(Java)/客户端(Android)应用程序,在服务器端,根据请求,我通过ObjectOutputStream发送3种类型的对象 对象类型如下所示: 在java服务器端: //My serializable classA MySerializableClassA classA = MySerializableClassA(A, B, C); out.WriteObject(classA); //Arraylist of my serializable classB ArrayL

我有一个服务器(Java)/客户端(Android)应用程序,在服务器端,根据请求,我通过ObjectOutputStream发送3种类型的对象

对象类型如下所示:

在java服务器端:

//My serializable classA
MySerializableClassA classA = MySerializableClassA(A, B, C);
out.WriteObject(classA);

//Arraylist of my serializable classB
ArrayList<MySerializableClassB> classB = new ArrayList<MySerializableClassB>();
classB.add(new MySerializableClassB(E, F, G, H));
out.writeObject(classB);

//Arraylist of my serializable classC
ArrayList<MySerializableClassC> classC = new ArrayList<MySerializableClassC>();
classC.add(new MySerializableClassC(Y, X, Z));
out.writeObject(classC);
//我的可序列化类A
MySerializableClassA类=MySerializableClassA(A、B、C);
out.WriteObject(classA);
//我的可序列化类B的Arraylist
ArrayList classB=新的ArrayList();
添加(新的MySerializableClassB(E,F,G,H));
out.writeObject(B类);
//我的可序列化类C的Arraylist
ArrayList classC=新的ArrayList();
添加(新的MySerializableClassC(Y,X,Z));
out.writeObject(C类);
在Android客户端:

Object obj
private MySerializableClassA classA;
private ArrayList<MySerializableClassB> arrayClassB;
private ArrayList<MySerializableClassC> arrayClassC;

//Here i get the object received, i store it in a Object
in = new ObjectInputStream(_socket.getInputStream());
obj = in.readObject();

//And I check of which class is an instance
if(obj instanceof MySerializableClassA){
    classA = (MySerializableClassA)obj;
    //Do a specific action
}
objectobj
私人MySerializableClassA classA;
私人ArrayList arrayClassB;
私人ArrayList ArrayClass;
//在这里,我得到接收到的对象,我将其存储在一个对象中
in=newObjectInputStream(_socket.getInputStream());
obj=in.readObject();
//我检查哪个类是实例
if(MySerializableClassA的obj实例){
classA=(MySerializableClassA)obj;
//做一个具体的动作
}
问题从这里开始,因为从Object到ArrayList的强制转换未选中

//I check if object is instanceof ArrayList...
else if(obj instanceof ArrayList){
    //and here a need to identify the type of the object inside the arraylist , so... 
    if(the object inside is an instanceof MySerializableClassB){
        arrayClassB = (ArrayList<MySerializableClassB>)obj;
        //Do a specific action
    }
    else if(the object inside is an instanceof MySerializableClassC){ 
        arrayClassC = (ArrayList<MySerializableClassC>)obj;
        //Do a specific action
    }
}
//我检查对象是否为ArrayList的instanceof。。。
else if(数组列表的obj实例){
//这里需要识别arraylist中对象的类型,所以。。。
if(其中的对象是MySerializableClassB的实例){
arrayClassB=(ArrayList)obj;
//做一个具体的动作
}
else如果(其中的对象是MySerializableClass的实例){
arrayClassC=(ArrayList)obj;
//做一个具体的动作
}
}
所以我的问题是: 有什么方法可以确定costum arraylist中包含我的对象的类型吗? 或者确定在这种情况下,什么类型的对象包含我的arraylist

我还可以选择在一个类中合并classB和classC。。。但如果我能做到我上面要求的,那就更好了


欢迎您提供任何帮助或其他方式的建议,谢谢。

您面临的问题称为。在运行时,无法识别
列表。第二种选择会很奇怪

如果您的用例允许,最简单的方法是遍历列表并决定每个项目。检查每个项目是否会产生相同的结果并不重要


将列表包装到带有项类型的对象中会向流中添加一些元数据。如果要避免创建该包装器,可以在每个列表之前手动将类型写入流,从而定义自定义协议。如果你沿着这条路走下去,考虑一下或类似。

你可以使用<代码> .GET())/>代码>从中取出第一个<代码>对象<代码>,然后测试它,但是必须要有一个更干净的方法来完成这一点。为什么不简单地把数组中的每一个都打包在一个可序列化的类型中,并用实例来标识它?谢谢你的回答,你说的是真的,无法区分列表和列表。所以我尝试使用单一的数据结构(将列表和列表结合起来),但这不是一个最佳的解决方案,所以我所做的就是继续使用列表。此外,一个接一个地发送B类对象,并在客户端创建列表作为这些数据的缓冲区。对不起,迟了答复。
Class<T> getItemType();