Можно ли получить переходное поле в классе с помощью отражения - PullRequest
9 голосов
/ 13 февраля 2010

Можно ли получить поле transient в классе с помощью отражения? (используя getDeclaredField(..))

Ответы [ 4 ]

24 голосов
/ 13 февраля 2010

Да , это нормальное поле. Вы можете проверить, является ли это переходным процессом:

Modifier.isTransient(field.getModifiers());

переходная : Ключевое слово в языке программирования Java, указывающее, что поле не является частью сериализованной формы объекта. Когда объект сериализуется, значения его переходных полей не включаются в последовательное представление, в то время как значения его непереходных полей включаются.

Так что нет логической причины, чтобы это не было доступно для размышлений. Игнорируется (иногда) значение поля, а не само поле.

(кстати, что помешало вам просто попытаться позвонить getDeclaredField("yourTransientField")?)

3 голосов
/ 13 февраля 2010

transient указывает, что поле не будет сериализовано. Поле все еще объявлено классом, так что это хорошая игра для размышлений.

2 голосов
/ 15 декабря 2011

Среди всех объектов, которые нужно сериализовать, есть те, которые не нужно сериализовать. Вот почему эти объекты помечены ключевым словом transient.

0 голосов
/ 04 ноября 2012

transient поля не имеют ничего общего с отражением. Ключевое слово только указывает, что поле должно быть пропущено во время сериализации Java процесса. Таким образом, отражение может получить доступ к transient полям, как и к любым другим полям.

...