有人告诉我,Java 中的 Marker 接口是一个空接口,用于向编译器或 JVM 发出信号,表明实现该接口的类的对象必须以特殊的方式处理,如序列化、克隆等。
但是最近我了解到它实际上与编译器或 JVM 没有任何关系。例如,在 Serializable接口的情况下,ObjectOutputStream的方法 writeObject(Object)执行类似于 instanceOf Serializable的操作来检测类是否实现 Serializable并相应地抛出 NotSerializableException。
一切都在代码中处理,这似乎是一个设计模式,所以我认为我们可以定义自己的标记接口。
现在我怀疑:
上面第一点提到的标记接口的定义是错误的吗?那么我们如何定义一个标记接口呢?
为什么不使用类似于 writeObject(Serializable)的方法来代替使用 instanceOf操作符,这样就有了编译时类型检查而不是运行时类型检查?
注释如何比标记接口更好?
 
                                
                             
                                
                             
                                
                             
                                
                             
                                
                             
                                
                             
                                
                             
                                
                             
                                
                            