我正在尝试通过套接字发送对象列表。
列表中的对象包含一个不可序列化的对象,因此无法发送,但是它的基类是完全可序列化的,并且包含我需要的所有字段。
所以我要做的是将列表转换为基类列表。我认为这样做的唯一方法如下:
// subClassList is an ArrayList<SubClass>
ArrayList<BaseClass> baseClassList = new ArrayList<BaseClass>();
for(SubClass subClass: subClassList) {
// cast to the base class
baseClassList.add((BaseClass)subClass);
}
但这不起作用,因为我仍然得到相同的 NotSerializableException 异常。通过调试代码我可以看到新列表仍然是子类的列表,即使它已经被转换。
有没有办法实现我想要做的事情?
最佳答案
转换引用不会改变实际对象的类型:
String foo = "hello";
Object bar = (Object) foo;
System.out.println(bar); // Hello
System.out.println(bar.getClass()); // java.lang.String
如果你想只有一个基类的实例,你可以在基类中创建一个构造函数,它简单地创建一个给定它的实例的基类的新实例,无需尝试执行任何类型的深层复制:
public BaseClass(BaseClass other) {
this.x = other.x;
this.y = other.y;
this.z = other.z;
// etc
}
然后在您显示的代码中:
baseClass.add(new BaseClass(subClass));
关于java - 从子类/子类/继承类获取基类/父类/父类(super class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15461667/