Зачем использовать ключевое слово `transient` в Java?
У меня есть проблема, связанная с transient
использование ключевого слова до private
Модификатор в Java.
объявление переменной:
transient private ResourceBundle pageResourceBundle;
Когда я его погуглил, я нашел эти документы ниже, но они говорят о сериализации. На самом деле мой класс не реализует никаких сериализованных.
Для получения дополнительной информации:
http://java91.blogspot.in/2017/01/why-does-java-have-transient-fields.html
Мой класс выглядит так:
public class LoginViewModel extends AbstractViewModel {
transient private ResourceBundle pageResourceBundle;
@AfterCompose
public void afterCompose(@ContextParam(ContextType.VIEW) Component view) {
initializeLoginValues();
boolean timeout = BooleanUtils.toBoolean(getHttpServletRequest().getParameter("timeout"));
if (timeout) {
Messagebox.show(pageResourceBundle.getText("MSG_SESSION_HAS_EXPIRED_PLEASE_LOGIN"), pageResourceBundle.getText("LABEL_ALERT"),
Messagebox.OK, Messagebox.ERROR);
}
view.getPage().setTitle(CsdcLicence.get().getApplicationName());
}
У меня есть несколько вопросов.
1. почему использовать transient
Ключевое слово перед закрытой переменной?
2. какова цель использования этого ключевого слова?
5 ответов
Временные переменные никогда не сериализуются в Java.
Он отмечает переменную-член, которую нельзя сериализовать, когда она сохраняется в потоках байтов. Когда объект передается через сеть, объект должен быть "сериализован". Сериализация преобразует состояние объекта в последовательные байты. Эти байты отправляются по сети, и объект воссоздается из этих байтов. Переменные-члены, помеченные ключевым словом java transient, не передаются, они намеренно теряются.
посмотри пожалуйста что такое сериализация.? а также отослать это
пример
public class Foo implements Serializable
{
private String saveMe;
private transient String dontSaveMe;
private transient String password;
//...
}
В приведенном выше примере dontSaveMe
& password
никогда не получают сериализацию, как они объявлены как transient variables
,
И короткий вариант использования:
Представьте, что вы открываете объект пользователя через общедоступный веб-сервис. Вы уверены, что хотели бы представить вещи как псевдоним, онлайн - состояние, может быть, электронная почта или местоположение. Вы определенно не хотите раскрывать пароль, который пользователь использует для входа в систему. Хотя этот пароль может быть свойством вашего объекта User, его не следует сериализовать, например, при сериализации объекта в строку JSON - String для упомянутого веб-сервиса.
transient
Ключевое слово предполагает, что объект не должен быть сериализованили сохранен. Вы можете использовать его, если вы не хотите сериализовать тяжелые объекты (такие как Wrapper
например, которые могут содержать много бизнес-логики).
@Transient
аннотация предполагает, что объект не должен сохраняться (например, если вы играли с Hibernate), но его можно сериализовать.
Я включил пояснение к аннотации, потому что я помню, что оба были смущены.:-)
Ключевое слово Transient может применяться только к переменным-членам.
Применение его к методу или локальной переменной является ошибкой компиляции.Ключевое слово
transient
в Java используется, чтобы указать, что переменная
не должно быть сериализовано. По умолчанию все переменные в объекте переводятся в постоянное состояние. В некоторых случаях вы можете захотеть
избегайте сохранения некоторых переменных, потому что у вас нет необходимости передавать по сети. Итак, вы можете объявить эти переменные
какtransient
,
transient
используется для указания того, какие свойства объекта не будут сохранены или сериализованы. Например, при сохранении объекта в файл, transient
указывает, какие свойства или атрибуты не будут сохранены в этот файл при сохранении этого объекта в файл.
Когда объект воссоздается из файла, значение этого transient
Атрибут (или частное свойство) не будет воссоздан, поскольку он никогда не был сохранен или сериализован в этот файл. В некоторых случаях вы можете избежать сохранения некоторых из этих частных переменных экземпляра или атрибутов объекта, transient
позволяет вам сделать это.