Java中的标记接口

Java中的标记接口,java,Java,Java中有标准标记接口的列表吗?我读过(在一些Java书籍中)标记接口没有任何方法可以实现,但是当我进行google搜索时,有一些答案指定标记接口确实可以有方法。如果是这样的话,那么我认为常规接口和标记接口之间没有区别-是否有可能消除我的混淆:)至少有一个:可序列化的。我个人不记得别人了。 自从java 1.5引入注释以来,定义ta接口的技术非常陈旧,几乎已经过时,因此您可以使用注释来“标记”类,而不是空接口。我不知道标准java api中有标记接口列表。我认为,维基百科的文章很好地解释了标记

Java中有标准标记接口的列表吗?我读过(在一些Java书籍中)标记接口没有任何方法可以实现,但是当我进行google搜索时,有一些答案指定标记接口确实可以有方法。如果是这样的话,那么我认为常规接口和标记接口之间没有区别-是否有可能消除我的混淆:)

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

我不知道标准java api中有标记接口列表。我认为,维基百科的文章很好地解释了标记接口是否可以指定方法。这里有一段摘录直接回答了你的问题:

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

除了本文中提到的可序列化接口之外,几乎没有其他接口。我脑海中唯一能记得的是


刚刚想到另一个:。我敢肯定还有更多。

在“标准”和“标记”接口之间确实没有技术上的区别

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


例如
Serializable
Cloneable
等。这些接口本身并不定义任何方法,但根据惯例和规范,您必须选择实现一些与它们相关的特殊方法,例如与
Serializable
相关的一些序列化方法。如果实现了标记接口,核心Java库将使用反射来检查这些方法是否存在。

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

自从引入java注释特性以来,不再需要标记接口。 最好使用比marker接口更强大的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 SE 8中的标记接口:

最广泛使用:

java.lang.Cloneable
java.io.Serializable
java.util.RandomAccess
java.util.EventListener
备注:EventListener正式名称为“标记接口”。

其他:


不过,对于空接口,您可以使用instanceOf关键字,而注释用法不支持该关键字。@Shimibandel好吧,您可以使用
isAnnotationPresent(…)
。这比
instanceOf
要详细一点。谢谢Thomas,所以从技术上讲,标记接口没有任何方法。我说的对吗?@PunterVicky是的,纯标记接口不会有方法。正如我所说的,它只是一个名称,而标记接口只是简单的旧接口,它将类标记为具有某些属性,正如AlexR所说的,因为Java 5通常会使用注释来实现这一目的。我要说的是,标记接口不添加任何方法。它可以为对象中的方法添加Javadoc,例如为
String toString()
Hi定义行为,所有条目都有帮助,但不幸的是,我只能将其中一个标记为正确。我投票支持其他人。谢谢另一个是:java.rmi.Remote
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