java - 从子类/子类/继承类获取基类/父类/父类(super class)

标签 java sockets serialization

我正在尝试通过套接字发送对象列表。

列表中的对象包含一个不可序列化的对象,因此无法发送,但是它的基类是完全可序列化的,并且包含我需要的所有字段。

所以我要做的是将列表转换为基类列表。我认为这样做的唯一方法如下:

// 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/

相关文章:

java - Android:使用接口(interface)中未定义的 MainActivity 方法的 fragment ?

java - 尝试进行 hbase 批量加载作业时,reducer 使用布隆过滤器提示无序输入

Java:将字符串转换为 Swing 表中的代码

c# - JSON : what is the java Map equivalent in c#

symfony - 使用fos:elastica:populate时检测到循环引用

java - 在 GWT 项目中继承外部 java 源

c - inet_ntoa 问题

java - 健全性检查 - 使用 TCP (ServerSocket) 的 Java 多人游戏服务器是否可行?

node.js - Heroku 上的 Socket.io "Session ID unknown"错误

php - 在 PHP 中从序列化数组中获取元素