用Java标记接口

Rub*_*bee 9 java interface

什么是标记接口以及它们用于什么?

Mar*_*wis 6

标记界面通常具有与之相关的一些魔力:直接构建到VM中,或使用反射.因为魔术在技术上可以适用于任何类,所以你使用标记来表明你对魔法的理解以及它是否适用于你的类.


ska*_*man 6

标记接口与注释的问题在Bloch的"Effective Java"中讨论,该部分的一部分可在google书籍上找到


gus*_*afc 5

因为有时候,如果一种类型的某些属性可以作为一种类型本身使用它真的很有意义 - Serializable想到这一点.如果我做一个像这样的方法:

public void save(Object data){ ... }
Run Code Online (Sandbox Code Playgroud)

......你真的不知道如何data保存.VM序列化?Bean属性序列化?一些自制计划?如果你这样写:

public void save(Serializable data){ ... }
Run Code Online (Sandbox Code Playgroud)

......很明显(如果只有设计师ObjectOutputStream使用过这种可能性!).当您想要将元数据添加到类型时,有时使用注释是有意义的,但在这种情况下,我会争论标记接口.

  • @xpt 像“void save(Serialized data)”这样的签名的优点是,它不会抛出一个异常,说“你向我传递了一些不可序列化的东西”,这不会让你感到惊讶,当事情没有选择加入时,就会发生这种情况序列化(选择加入是个好主意)。Java 的序列化机制是定义良好的,尽管您可以争论像这样的自动魔法的优点(我想我们都同意 Java 的序列化是一个错误)。 (2认同)