2013-04-09 14 views
17

Java Annotation interfaceSerializableを拡張しません。ただし、Javaの注釈値はシリアル化可能です(java.lang.reflect.Proxyを使用して実装され、シリアライズ可能な呼び出しハンドラを使用します)。Javaアノテーションはシリアライズ可能ですか?

どこでも保証されますか?私のsearch-fooは参照を見つけることに失敗しています。または、注釈インスタンスを安全にシリアル化する必要がある場合は、独自のシリアル化プロキシを作成する必要がありますか?

+1

私の直感は静的なので、はいです。そのために、それらは 'Serializable'である必要がありますか? –

答えて

10

java.lang.reflect.AnnotatedElementのメソッドによって返される注釈オブジェクトは、Serializableです。これは何ですかAPI saysこのインターフェイスでは注釈を反射的に読み取ることができます。このインタフェースのメソッドによって返されるすべての注釈は不変であり、シリアル化可能です

注釈オブジェクト(クラス、コンストラクタ、フィールド、メソッド、パッケージ、パラメータ)を返すことができるすべてのクラスは、AnnotatedElementを実装しており、上記の契約によってSerializableオブジェクトを作成/返す義務があります。

+0

完璧、ありがとうございます! –

9

アノテーションはクラス定義の一部であり、アノテーションを持つクラスのインスタンスをシリアライズするときは、シリアル化ストリーム(少なくとも標準のJavaシリアル化ではない)に決して書き込まれません。

更新: 私は実際の注釈のインスタンスを具体的にシリアライズすることを指していた元の質問のポイントを逃したと思います。

+0

私は、(Class.getAnnotation'などの)アノテーションオブジェクトを持っていて、それをシリアル化する必要がある場合、アノテーション値について具体的に尋ねています。これは、アノテーションを持つクラスをシリアライズする際に通常直列化されているかどうかに依存しません。 –

+0

@MichaelEkstrand - 私はそれを理解しています。私は、注釈値は、私が言及した点のために、通常は直列化される必要はないことを指摘していました。もう一つの答えは確かにより適切な事実を持っていますが、この答えは間違っているわけではありません。 – jtahlborn

+0

「アノテーションを持つクラスをシリアライズするとき」を追加した場合は正しくなるでしょう – Ajax

関連する問題