我被告知Java中的Marker接口是一个空接口,用于向编译器或JVM发出信号,表明必须以特殊方式处理实现此接口的类的对象,如序列化,克隆等.
但最近我了解到它实际上与编译器或JVM无关.例如,在的情况下,Serializable接口的方法writeObject(Object)的ObjectOutputStream不喜欢的东西instanceOf Serializable,以检测类实现是否Serializable与抛出NotSerializableException相应.一切都在代码中处理,这似乎是一个设计模式,所以我认为我们可以定义自己的标记接口.
现在我怀疑了:
上面提到的标记接口的定义在第一点是错误的吗?那么我们如何定义Marker接口呢?
而不是使用instanceOf运算符为什么不能使方法类似于writeObject(Serializable)有一个编译时类型检查而不是运行时?
注释如何比标记接口更好?
有人可以解释一下java中标记接口的契约吗?
对于Ex:如果Clonable是没有字段/方法的标记接口,那么clone()定义在哪里?
我们为什么要Clonable在clone()使用时实现i/f ?
好吧,我的问题是,如果clone()是一个java.lang.Object类的方法,为什么要实现Clonablei/f来覆盖clone().
有人可以详细说明这个java的惯例吗?
提前致谢