Java中的标记接口?

我被告知Java中的Marker接口是一个空接口,用于向编译器或JVM发出信号,告知实现该接口的类的对象必须以特殊方式处理,例如序列化,克隆等。

但是最近我了解到它实际上与编译器或JVM无关。例如,在使用Serializable接口的情况下,的方法writeObject(Object)ObjectOutputStream


慕虎7371278
浏览 336回答 3
3回答

凤凰求蛊

上面第一点提到的标记接口的定义是否错误?-在以下部分中是正确的:(1)标记接口必须为空,并且(2)实现该接口意味着要对实现类进行某些特殊处理。不正确的部分是,这意味着JVM或编译器将以不同的方式对待该类的对象:您正确地观察到是Java类库的代码将这些对象视为可克隆,可序列化等。与编译器或JVM无关。而不是使用instanceOf运算符,为什么该方法不能这样,writeObject(Serializable)以至于进行编译时类型检查 -这样可以避免在需要“普通Object” 时用标记接口的名称污染代码。例如,如果您创建一个需要可序列化并且具有对象成员的类,那么您将不得不进行强制转换或Serializable在编译时创建对象。这很不方便,因为该接口没有任何功能。注释比标记接口如何好?-它们使您达到了将有关类的元数据传送给其使用者的相同目的,而无需为其创建单独的类型。注释也更加强大,它使程序员可以将更复杂的信息传递给“消费”它的类。

呼如林

不能强制执行Serializable,writeObject因为不可序列化类的子级可以序列化,但是它们的实例可能被向上转换回父类。因此,持有对无法序列化的内容(例如Object)的引用并不意味着所引用的实例确实无法序列化。例如在   Object x = "abc";   if (x instanceof Serializable) {   }父类(Object)无法序列化,可以使用其无参数构造函数进行初始化。通过引用的价值x,String是序列化的条件语句将运行。

慕桂英4014372

a /标记接口,顾名思义,仅存在于通知类的任何东西都在声明一个类。任何东西都可以是Serializable接口的JDK类,也可以是您为自定义类编写的任何类。b /如果它是标记接口,则不应暗示存在任何方法-最好在接口中包含隐含方法。但你可以决定要设计它,只要你想,如果你知道为什么 你需要它c /空接口和不使用值或参数的注释之间几乎没有区别。但是区别在于:注释可以声明键/值的列表,这些键/值将在运行时访问。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java