这是否可以编写Marker接口

mog*_*gli 8 java serialization

我已经完成了以下教程:

http://www.javaworld.com/community/node/2915

在阅读完上面的文章之后,我觉得,编写Marker接口是不可能的,因为,如何指导编译器,它是什么标记,它嵌入到Marker接口的.class文件中.

如果我错了,请纠正我.欢呼:)

Ste*_*n C 14

这里的标签是六进制十进制代码AC ED,它被添加到实现Serializable接口的那个类的.class文件中.因此,JVM以特殊方式处理此类文件(可能是一些繁重的资源分配工作),因为此类的实例可能是序列化的.对于普通类,它会添加CA FE hex.

啊哈!我理解你的困惑.

  • CA FE字节码文件的幻数; 即编译类时获得的文件.ANY类的字节码文件具有这个神奇的数字,无论它是可序列化的还是不可序列化的.

  • AC ED是序列化Java对象文件的神奇数字; 即您序列化某些可序列化类的实例的文件.

您正在混合两个不同的概念(类和实例)及其各自的表示.

所以你的问题的答案是......当然你可以编写自己的标记界面!关于实现标记接口的类,编译器没有什么特别之处.

然而,这是不可能复制Java对象序列化的纯Java实现.对象反序列化使用后门(Unsafe.allocateInstance方法)来创建对象而不调用其构造函数.AFAIK,此方法无法从普通Java代码调用.(即使它可以,也不应该......)


Joa*_*uer 8

当然你可以写一个标记界面.标记接口通常只是一个完全没有方法的接口(所以任何类都可以实现它).

你似乎认为标记界面有一些神奇的属性,可以自己做一些事情.事实并非如此.相反,其他一些代码可以对某个对象上标记接口的存在做出反应,并在类实现时采取不同的行为.但标记界面本身并没有做任何事情.