我正在使用Kryo库进行Java序列化。我有一个问题,我无法强迫上传。以下是一个示例情况:
class A {}
class B extends A {}
public save() {
Kryo kryo = new Kryo();
kryo.setRegistrationRequired(true); //force registration
kryo.register(A.class); //register A with kryo
Output output = new Output( ... );
B bar = new B();
kryo.writeObject(output, (A) bar); //try to cast it up
}
这会导致class not registered
错误,因为bar
仍然是B
的实例。
有没有办法强制bar
投放到A
的实例,还是需要执行new A(bar)
之类的操作?
答案 0 :(得分:2)
向上转换不会更改对象本身,只会更改指向它的引用类型。您必须注册B.class.
答案 1 :(得分:1)
你实际上不能这样做,因为正如你所说,强制转换不会改变对象仍然是B的实例而不是A的事实。你需要将A委托给B的复合实例并传递它通过你建议的构造函数。