Java: Как заставить upcast?

Я использую библиотеку 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 ответа

Решение

Обновление не изменяет сам объект, только тип ссылки, которая указывает на него. Вам придется зарегистрироваться B.class.

На самом деле вы не можете сделать это, поскольку, как вы заявили, приведение не меняет того факта, что объект все еще является экземпляром B, а не A. Вам нужно будет сделать делегат A составному экземпляру B и передать его через конструктор. как вы предложили.

Другие вопросы по тегам