2010-02-13 58 views

回答

23

,這是一個普通的字段。您可以檢查它是否是通過瞬時:

Modifier.isTransient(field.getModifiers()); 

短暫: Java編程語言,指出一個字段是不是對象的序列化形式的一部分的關鍵字。當對象序列化時,其瞬態字段的值不包含在串行表示中,而包含其非瞬態字段的值。

所以沒有邏輯的原因,它不能被反射訪問。這是該字段的價值(有時)被忽略,而不是字段本身。

(順便說一句,是什麼阻礙了你只是想打電話getDeclaredField("yourTransientField")?)

+0

錯過了第一個代碼塊中的一個parens :) – RCIX 2010-02-13 07:08:20

3

transient表示該字段不會被序列化。這個領域仍然由班級宣佈,所以這是反思的公平遊戲。

2

在需要序列化的所有對象中,有那些不需要序列化的對象。這就是爲什麼這些對象用關鍵字transient標記的原因。

0

transient字段與反射無關。該關鍵字僅表示在Java serialization過程中應該跳過一個字段。所以反射可以像訪問其他字段一樣訪問transient字段。