我有类SuperYo扩展类Persona,像这样:
public class SuperYo extends Persona {
private NotSerializableObj obj1
private NotSerializableObj obj2
private NotSerializableObj obj3
}
public class Persona {
private SerializableObj sObj1
private SerializableObj sObj2
private SerializableObj sObj3
}
问题是,我从SuperYo中向LinkedList添加了一个Persona实例:
LinkedList<Persona> list = new LinkedList<Persona>();
list.add((Persona) superYo);
它将它添加为SuperYo对象!使用所有NonSerializableObjs ...因此,不能从套接字发送:(。
所以,问题是......是否有任何方法可以将一个对象“向下转移”到它的父类,所以它的归属不存在?
谢谢!
答案 0 :(得分:0)
施法是多态的问题。当你将type1的对象转换为type2时,实例不会改变,但你只是从一个新的角度看实例!
如果要通过网络发送子类,可以将SuperYo成员设置为瞬态,并在实例化时填充它们。或者,您可以将writeObject()和readObject()方法添加到子类中。
答案 1 :(得分:0)
在readObject
中实施writeObject
和SuperYo
,如下所示:
private void writeObject(ObjectOutputStream outStream) throws IOException {
//write attributes from PersonYo only
outStream.defaultWriteObject();
outStream.writeObject(sObj1);
outStream.writeObject(sObj2);
outStream.writeObject(sObj2);
}
private void readObject(ObjectInputStream inStream) throws IOException,
ClassNotFoundException {
//read attributes from PersonYo only
inStream.defaultReadObject();
sObj1= (SerializableObj)inStream.readObject();
sObj2= (SerializableObj)inStream.readObject();
sObj3= (SerializableObj)inStream.readObject();
}
一旦你这样做,就不需要降级了。此外,您可以更好地控制对象中的其他非可序列化属性。