Зачем использовать ключевое слово "transient" в java? [дубликат]
этот вопрос уже есть ответ здесь:
- почему Java имеет переходные поля? 13 ответов
у меня вопрос 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-object,
он не должен сериализовываться, например, при сериализации объекта в JSON - строку для упомянутого веб-сервиса.
transient
ключевое слово предполагает, что объект не следует сериализовывать, ни упорствовал. Вы можете использовать его, если не хотите сериализовать тяжелые объекты (например,Wrapper
s, например, который может содержать много бизнес-логики).
@Transient
аннотация предполагает, что объект не следует настаивать (если Вы играли с Hibernate, например), но это может быть сериализован.
Я включил пояснение аннотации, потому что я помню, что был смущен этими двумя. :-)
Ключевое слово Transient может применяться только к переменным-членам.
Применение его к методу или локальной переменной является ошибкой компиляции.ключевое слово
transient
в Java используется для указания того, что переменная
не следует сериализовывать. По умолчанию все переменные в объекте преобразуются в постоянное состояние. В некоторых случаях вы можете захотеть
избегайте сохранения некоторых переменных, потому что у вас нет необходимости для передачи через сеть. Таким образом, вы можете объявить эти переменные
astransient
.
transient
используется для указания, какие свойства объекта не будут сохранены или сериализованный. Например, при сохранении объекта в файл transient
указывает, какие свойства или атрибуты не будут сохранены в этом файле при сохранении этого объекта в файл.
когда объект повторно создается из файла, значение этого transient
атрибут (или частная собственность) не будет повторно создан, поскольку он никогда не был сохранен или сериализован в этот файл. В в некоторых случаях может потребоваться избежать сохранения некоторых из этих частных переменных экземпляра или атрибутов объекта,transient
позволяет вам это делать.