Java中的标记接口

Java中是否有标准标记接口列表? 我已经读过(在一些Java书中)标记接口没有任何方法可以实现,但是当我进行谷歌搜索时 – 有一些答案指明标记接口确实可以有方法。 如果是这种情况,那么我认为常规界面和标记界面之间没有区别 – 是否有可能清除我的困惑:)

“标准”和“标记”接口之间确实没有技术差异。

通常,您定义一个接口来定义实现类应具有的方法。 如果未指定任何方法,则将接口称为标记接口,因为如果仅将类标记为具有某些属性。

其中的例子是SerializableCloneable等。这些接口本身并没有定义任何方法,但是按照惯例和规范,你必须选择实现一些与它们相关的特殊方法,例如一些与Serializable相关的Serializable化方法。 然后,核心Java库将使用reflection来检查在实现标记接口时是否存在这些方法。

至少有一个: Serializable 。 我个人不记得别人。 定义ta接口的技术是旧的,几乎已经过时了,因为Java 1.5引入了注释,因此您可以使用注释来“标记”类而不是空接口。

标记接口用作标记以将消息通知给java编译器,以便它可以向实现它的类添加特殊行为,并且它们没有任何方法声明。

自从引入java注释function以来,不再需要标记接口。 更好地使用比标记接口更强大的Java注释。

标记接口的一些示例:

  • java.lang.Cloneable
  • 的java.io.Serializable
  • java.rmi.Remote的
  • java.util.EventListener的

SigleThreadModel也是标记界面 – (我知道它现在已被弃用,但仅举例来说我在这里提出它的名字)

在这里查看更多相关信息

当一个接口被Java解释器作为句柄提供来标记一个类,以便它可以在运行时为它提供特殊行为并且它们没有任何方法声明时,它被称为标记接口。

Java标记接口示例

 java.lang.Cloneable java.io.Serializable java.util.EventListener 

我不知道标准Java api中有标记接口列表。 我认为,在维基百科文章“标记界面模式”中 ,是否可以很好地解释标记接口是否可以指定方法。 这是一个直接解决您的问题的摘录:

虽然典型的接口指定实现类必须支持的function(以方法声明的forms),但标记接口不需要这样做。 仅仅存在这样的接口表明了实现类的特定行为。 混合接口既可以作为标记并指定所需的方法,但如果使用不当可能会造成混淆。

除了文章中提到的Serializable接口之外,还有其他几个。 我唯一记得的就是javax.security.auth.callback 。

刚想到另一个: javax.security.auth.login.Configuration.Parameters 。 我很确定还有更多。

Java SE 8中的标记接口:

使用最广泛:

 java.lang.Cloneable java.io.Serializable java.util.RandomAccess java.util.EventListener 

备注 :EventListener官方称为“标记接口”。

其他:

 java.util.concurrent.CompletableFuture.AsynchronousCompletionTask java.sql.ParameterMetaData javax.xml.stream.events.EndDocument javax.management.loading.PrivateClassLoader java.security.KeyStore.Entry java.security.KeyStore.LoadStoreParameter java.security.KeyStore.ProtectionParameter java.security.Policy.Parameters javax.security.auth.callback.Callback javax.security.auth.login.Configuration.Parameters