2013-04-09 58 views
17

Java Annotation interface不延伸Serializable。但是,Java註釋值是可序列化的(使用java.lang.reflect.Proxy實現,帶有可序列化的調用處理程序)。Java註釋是否可序列化?

這是有保證的地方嗎?我的search-foo無法找到參考。或者,如果我需要安全地序列化註釋實例,是否需要創建我自己的序列化代理?

+1

我的直覺是肯定的,因爲它們是靜態的。因爲這些,他們甚至需要'可序列化'嗎? – 2013-04-09 14:39:34

回答

10

方法java.lang.reflect.AnnotatedElement返回的註釋對象是Serializable。這是什麼API says此接口允許反射性地讀取註釋。由該接口中的方法返回的所有註釋都是不可變的,並且可以序列化爲

所有能夠返回註解對象的類(Class,Constructor,Field,Method,Package,Parameter)都實現AnnotatedElement,並且有義務按上述合約創建/返回Serializable對象。

+0

完美,謝謝! – 2013-04-09 15:15:29

9

註解是類定義的一部分,因此當序列化具有註釋的類的實例時,永遠不會寫入序列化流(至少不會用標準java序列化)。

更新: 我想我錯過了原來的問題,指的是具體序列化一個實際的註釋的實例點。

+0

我在具有註釋對象(例如,來自'Class.getAnnotation')並想要序列化它的情況下,特別詢問了註釋值。這與序列化具有註釋的類的過程中是否正常序列化無關。 – 2013-04-09 15:16:51

+0

@MichaelEkstrand - 我明白這一點。我指出註解值通常不需要序列化,因爲我提到了這一點。另一個答案肯定有更相關的事實,但這個答案本身並不是不正確的。 – jtahlborn 2013-04-09 15:32:02

+0

如果添加「序列化具有註釋的類時」將是正確的 – Ajax 2017-09-09 12:18:54

相關問題