transient
не отключает сериализацию вообще;это просто отмечает участников, которые не будут сериализованы.Обычно он используется для вещей, которые были бы неправильными или неуместными, когда объект не сериализован, или вещей, которые было бы небезопасно хранить (пароли, дешифрованные данные и тому подобное), или несериализуемых вещей, которые могли быбыть легко восстановленным.
В этом случае я предполагаю, что класс Loan
не сериализуем.(Если бы это было так, то А было бы правильным.) Обозначение v3
как переходного процесса просто говорит Java не беспокоиться об этом поле, а идти дальше и сериализовать остальные.Это означает, что несериализованный Foo
может иметь значение v3
.Если вы также хотите сохранить Loan
, вам нужно будет либо отслеживать достаточно информации, чтобы воссоздать ее по своему желанию, либо изменить класс Loan
, чтобы он также реализовывал java.io.Serializable
.
В качестве альтернативы есть методы, которые вы можете реализовать (writeObject
, readObject
), если вам нужен контроль над сериализацией.Но это может быть немного хлопот.