3 回答
TA贡献1825条经验 获得超4个赞
上面第一点提到的标记接口的定义是否错误?-在以下部分中是正确的:(1)标记接口必须为空,并且(2)实现该接口意味着要对实现类进行某些特殊处理。不正确的部分是,这意味着JVM或编译器将以不同的方式对待该类的对象:您正确地观察到是Java类库的代码将这些对象视为可克隆,可序列化等。与编译器或JVM无关。
而不是使用instanceOf运算符,为什么该方法不能这样,
writeObject(Serializable)
以至于进行编译时类型检查 -这样可以避免在需要“普通Object
” 时用标记接口的名称污染代码。例如,如果您创建一个需要可序列化并且具有对象成员的类,那么您将不得不进行强制转换或Serializable
在编译时创建对象。这很不方便,因为该接口没有任何功能。注释比标记接口如何好?-它们使您达到了将有关类的元数据传送给其使用者的相同目的,而无需为其创建单独的类型。注释也更加强大,它使程序员可以将更复杂的信息传递给“消费”它的类。
TA贡献1798条经验 获得超3个赞
不能强制执行Serializable,writeObject因为不可序列化类的子级可以序列化,但是它们的实例可能被向上转换回父类。因此,持有对无法序列化的内容(例如Object)的引用并不意味着所引用的实例确实无法序列化。例如在
Object x = "abc";
if (x instanceof Serializable) {
}
父类(Object)无法序列化,可以使用其无参数构造函数进行初始化。通过引用的价值x,String是序列化的条件语句将运行。
TA贡献1871条经验 获得超13个赞
a /标记接口,顾名思义,仅存在于通知类的任何东西都在声明一个类。任何东西都可以是Serializable
接口的JDK类,也可以是您为自定义类编写的任何类。
b /如果它是标记接口,则不应暗示存在任何方法-最好在接口中包含隐含方法。但你可以决定要设计它,只要你想,如果你知道为什么 你需要它
c /空接口和不使用值或参数的注释之间几乎没有区别。但是区别在于:注释可以声明键/值的列表,这些键/值将在运行时访问。
添加回答
举报