【问题标题】:Are Java annotations serializable?Java注解可以序列化吗?
【发布时间】:2013-04-09 14:32:47
【问题描述】:

Java Annotation interface 没有扩展 Serializable。但是,Java 注释值是可序列化的(使用 java.lang.reflect.Proxy 实现,带有可序列化的调用处理程序)。

这在任何地方都有保证吗?我的 search-foo 找不到参考。或者如果我需要安全地序列化注解实例,是否需要创建自己的序列化代理?

【问题讨论】:

  • 我的直觉是肯定的,因为它们是静态的。因此他们甚至需要Serializable 吗?

标签: java serialization annotations


【解决方案1】:

java.lang.reflect.AnnotatedElement 的方法返回的注解对象是Serializable。这就是API says这个接口允许反射式地读取注释。此接口中方法返回的所有注解都是不可变的和可序列化的

所有能够返回注解对象(Class、Constructor、Field、Method、Package、Parameter)的类都实现了AnnotatedElement,并且有义务按照上述约定创建/返回Serializable对象。

【讨论】:

    【解决方案2】:

    注解是类定义的一部分,因此在序列化具有注解的类的实例时永远不会被写入序列化流(至少不使用标准的 java 序列化)。

    更新: 我想我错过了原始问题的要点,即专门序列化实际注释的实例。

    【讨论】:

    • 如果我有一个注释对象(例如来自Class.getAnnotation)并想要序列化它,我特别询问注释值。这与它们是否在序列化具有注释的类的过程中正常序列化无关。
    • @MichaelEkstrand - 我明白这一点。我指出注释值通常不需要序列化,因为我提到了这一点。另一个答案肯定有更相关的事实,但这个答案本身并不是不正确的。
    • 如果您添加“当序列化具有注释的类时”将是正确的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    相关资源
    最近更新 更多