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 и передать его через конструктор. как вы предложили.