2013-04-09 3 views
17

Java Annotation interfaceSerializable을 확장하지 않습니다. 그러나 Java 주석 값은 직렬화 가능합니다 (java.lang.reflect.Proxy을 사용하여 구현되며 직렬화 가능 호출 핸들러가 있음).Java 주석을 직렬화 할 수 있습니까?

어디서나 보장됩니까? 내 search-foo가 참조를 찾지 못했습니다. 또는 주석 인스턴스를 안전하게 serialize해야하는 경우 고유 한 serialization 프록시를 만들어야합니까?

+1

내 직관력은 정적이기 때문에 예입니다. 그것 때문에 그것들은 심지어'Serializable' 일 필요가 있습니까? –

답변

10

java.lang.reflect.AnnotatedElement의 메소드로 반환되는 주석 객체는 Serializable입니다. 이것은 무엇입니까 API says : 이 인터페이스를 사용하면 주석을 반사적으로 읽을 수 있습니다. 이 인터페이스의 메소드에 의해 리턴 된 모든 주석은 변경 불가능하고 직렬화 가능합니다..

주석 객체 (클래스, 생성자, 필드, 메서드, 패키지, 매개 변수)를 반환 할 수있는 모든 클래스는 AnnotatedElement를 구현하며 위 계약에 따라 Serializable 객체를 만들거나 반환해야합니다.

+0

완벽한, 감사합니다! –

9

주석은 클래스 정의의 일부이므로 주석이있는 클래스의 인스턴스를 직렬화 할 때 직렬화 스트림 (적어도 표준 Java 직렬화가 아닌 경우)에 기록되지 않습니다.

업데이트 : 나는 실제 Annotation의 인스턴스를 직렬화하는 것과 관련된 원래 질문의 요점을 놓쳤다.

+0

필자는 주석 객체 (예 :'Class.getAnnotation')가 있고 그것을 직렬화하고자 할 때 주석 값을 묻습니다. 이는 주석이있는 클래스를 직렬화하는 과정에서 일반적으로 직렬화되는지 여부와는 독립적입니다. –

+0

@MichaelEkstrand - 이해합니다. 나는 주석 값이 일반적으로 내가 언급 한 점 때문에 직렬화 될 필요가 없다는 것을 지적했다. 다른 대답은 분명히 더 적절한 사실을 가지고 있지만,이 대답 자체가 정확하지 않습니다. – jtahlborn

+0

"주석이있는 클래스를 직렬화 할 때"를 추가하면 정확합니다. – Ajax

관련 문제