【问题标题】:Can a transient field in a class be obtained using reflection可以使用反射获得类中的瞬态字段吗
【发布时间】:2011-01-16 10:29:11
【问题描述】:

可以使用反射获得类中的transient 字段吗? (使用getDeclaredField(..)

【问题讨论】:

  • 您找到解决方法了吗?

标签: java reflection transient


【解决方案1】:

是的,这是一个正常的字段。您可以通过以下方式检查它是否是瞬态的:

Modifier.isTransient(field.getModifiers());

瞬态: Java 编程语言中的一个关键字,表示字段不是对象的序列化形式的一部分。当一个对象被序列化时,它的瞬态字段的值不包括在序列表示中,而它的非瞬态字段的值被包括在内。

所以没有逻辑理由不能通过反射访问它。被忽略的是字段的值(有时),而不是字段本身。

(顺便说一句,是什么阻碍了您尝试致电getDeclaredField("yourTransientField")?)

【讨论】:

    【解决方案2】:

    transient 表示该字段不会被序列化。该字段仍由类声明,因此对于反射来说是公平的游戏。

    【讨论】:

      【解决方案3】:

      在所有需要序列化的对象中,有一些不需要序列化。这就是为什么这个对象用关键字transient标记的原因。

      【讨论】:

        【解决方案4】:

        transient 字段与反射无关。该关键字仅表示应在Java serialization 过程中跳过字段。所以反射可以像访问任何其他字段一样访问transient 字段。

        【讨论】:

          猜你喜欢
          • 2011-03-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-14
          • 2010-10-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多