2010-12-30 10 views
39

Acabo de descubrir en Java que puede declarar un campo 'estático transitorio' - el compilador no se queja. Esto no parece ser útil de ninguna manera ya que todos los campos no están serializados, como todos sabemos.Java: campos transitorios estáticos

Pero me pregunto, ¿hay realmente un caso donde los campos 'transitorios estáticos' son útiles?

+30

campos transitorios estáticos se pueden detectar mediante reflexión. Puede escribir su propio serializador para hacer XML, JSon, etc. y puede darle un significado especial si tiene la intención de guardar variables estáticas también. –

+0

+1 para obtener un caso de uso. Entiendo que es redundante. – Nishant

+3

BTW: Puedes tener otras combinaciones de modificadores que no tienen tanto sentido como el constructor público en una clase abstracta o un constructor/método protegido de una clase final. –

Respuesta

15

No, lo dijiste tú mismo, los campos estáticos no están serializados.

Aunque es un tanto extraño que el compilador te permita hacer eso.

+19

No están serializados por el serializador Java integrado. Sin embargo, otros serializadores pueden comportarse de manera diferente. –

+3

E incluso con otro serializador, el punto de guardar campos estáticos es ...? –

+4

@ Peter, por cierto serialVersionUID sería una excepción. –

7

En la mayoría de los casos, no es útil. Los campos estáticos de hecho no están serializados por el serializador predeterminado.

Sin embargo, los campos statictransient se pueden detectar mediante reflexión. Si alguien escribe su propio serializador y quiere serializar también campos estáticos, entonces podría tomar en consideración la palabra clave transient y omitir la serialización de ese campo en particular.

PD: Esta respuesta se publica para completar, y se basa en Peter Lawrey's comment. Créditos para él.

Cuestiones relacionadas