我被告知Java中的Marker接口是一个空接口,用于向编译器或JVM发出信号,表明必须以特殊方式处理实现此接口的类的对象,如序列化,克隆等.
但最近我了解到它实际上与编译器或JVM无关.例如,在的情况下,Serializable接口的方法writeObject(Object)的ObjectOutputStream不喜欢的东西instanceOf Serializable,以检测类实现是否Serializable与抛出NotSerializableException相应.一切都在代码中处理,这似乎是一个设计模式,所以我认为我们可以定义自己的标记接口.
现在我怀疑了:
上面提到的标记接口的定义在第一点是错误的吗?那么我们如何定义Marker接口呢?
而不是使用instanceOf运算符为什么不能使方法类似于writeObject(Serializable)有一个编译时类型检查而不是运行时?
注释如何比标记接口更好?
clone()定义为受保护的具体原因是java.lang.Object什么?
我正在寻找一些解释Java的教程Cloneable,但没有得到任何好的链接,而且Stack Overflow正变得越来越明显.
我想知道以下内容:
Cloneable意味着我们可以通过实现Cloneable接口来获得克隆或对象的副本.这样做的优点和缺点是什么? 我知道什么是标记接口 - 没有方法的接口.示例:可序列化,远程,可克隆.
我想知道标记接口的目的是什么.这是我的理解: -
基本上它只是从普通对象中识别特殊对象.与序列化的情况一样,需要序列化的对象必须实现可序列化的接口,并且如果它是可序列化的实例,则必须在某处检查writeObject()方法.据我所知,这是使用接口serializable(标记接口)的writeObject的唯一目的.对?或者jvm在可序列化接口的基础上提供了一些额外的功能?
类似的逻辑适用于可克隆接口.
现在让我们看看它是如何有用的.
让我们在应用程序中说我们有1000个值对象.我们只想序列化100个特定对象.现在JDK已经说过程序员角色只是用标记接口将对象标记为特殊的,在这种情况下是可序列化的接口.现在JDK会处理哪个对象要序列化?
是的,我们可以通过某种博尔干国旗实现这种行为.但这将是一个糟糕的方法.
类似地,我们可以说在用户定义标记接口的情况下,我们可以借助标记接口来区分特殊对象.就像我们可以使用运算符实例来确定它是否是该特定接口的实例.如果是,则在不抛出一些异常的情况下继续.
如果以上理解正确,请告诉我们?
Java中是否有标准标记接口列表?我已经读过(在一些Java书中)标记接口没有任何方法可以实现,但是当我进行谷歌搜索时 - 有一些答案指明标记接口确实可以有方法.如果是这种情况,那么我认为常规界面和标记界面之间没有区别 - 是否有可能清除我的困惑:)