1

我正在使用 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)

4

2 回答 2

2

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

于 2014-03-10T02:47:21.967 回答
1

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

于 2014-03-10T02:43:43.700 回答