Java:如何强制转发?

时间:2014-03-10 02:36:41

标签: java kryo kryonet

我正在使用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)之类的操作?

2 个答案:

答案 0 :(得分:2)

向上转换不会更改对象本身,只会更改指向它的引用类型。您必须注册B.class.

答案 1 :(得分:1)

你实际上不能这样做,因为正如你所说,强制转换不会改变对象仍然是B的实例而不是A的事实。你需要将A委托给B的复合实例并传递它通过你建议的构造函数。