2010-12-30 3 views
39

방금 ​​자바에서 '정적 과도'필드를 선언 할 수 있음을 알았습니다. 컴파일러는 불평하지 않습니다. 우리 모두 알고 있듯이 정적 필드가 직렬화되지 않기 때문에 어떤 방식으로도 유용하지는 않습니다.Java : 정적 과도 필드

하지만 실제로 '정적 과도'필드가 유용한 경우가 있습니까?

+30

정적 일시적인 필드를 반사를 통해 감지 할 수 있습니다. XML, JSon 등을 수행하기 위해 독자적인 시리얼 라이저를 작성할 수 있으며, 정적 변수도 저장하려는 경우 특별한 의미를 부여 할 수 있습니다. –

+0

+1은 유스 케이스를 얻습니다. 내 이해는 그것이 중복되었다. – Nishant

+3

BTW : 추상 클래스의 public 생성자 또는 최종 클래스의 보호 된 생성자/메서드와 같이별로 의미가없는 다른 수정 자 조합을 사용할 수 있습니다. –

답변

15

아니요 - 직접 말하면 정적 필드는 직렬화되지 않습니다.

이상하게도 컴파일러가 그렇게 할 수 있습니다.

+19

내장 된 Java serializer로 직렬화되지 않습니다. 그러나 다른 serializer는 다르게 동작 할 수 있습니다. –

+3

그리고 다른 serializer를 사용하더라도 정적 필드를 저장하는 것이 ...? –

+4

@ 피터, 그런데 serialVersionUID는 예외입니다. –

7

대부분의 경우 유용하지 않습니다. 정적 필드는 실제로 기본 직렬 변환기에 의해 직렬화되지 않습니다.

그러나 statictransient 필드는 반사를 통해 감지 될 수 있습니다. 누군가가 자신의 serializer를 작성하고 정적 필드를 serialize하려는 경우 일 수도 있고 키워드를 사용하여 transient 키워드를 가져 와서 특정 필드의 직렬화를 건너 뛸 수 있습니다.

추신 :이 답변은 완전을 기하기 위해 게시되었으며 Peter Lawrey's comment을 기반으로합니다. 그에게 크레딧.