Есть ли способ заставить readExternal() использовать другой конструктор?

Я пытался реализовать readExternal от Externalizable интерфейс для более эффективной сериализации моего большого объекта, когда я понял, что нет способа, которым я могу создать новый объект (и использовать его) в этом методе. Дело в том, что мое эффективное представление необходимо расшифровать, и поэтому я не могу назначить свои поля напрямую. Код выглядит следующим образом:

public class BigObject implements Externalizable {

    //lots of fields and methods...

    @Override
    public void writeExternal(ObjectOutput out) throws IOException {
        out.writeObject(this.encode()); //encodes to a BigInteger
    }

    @Override
    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
        BigInteger code = (BigInteger) in.readObject();
        BigObject bo = BigObject.decode(code);
        // now I would like this to be "bo"
    }
}

На данный момент я копирую все поля из получаемого объекта, но это выглядит ужасно, и я хотел знать, будет ли более приятный путь к чему-то подобному?

1 ответ

Проблема в том, что ваш encode а также decode методы не согласованы. decode это статический метод и encode не является. Мое предложение будет сделать decode не статично.

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