java的标记接口_Java中的标记接口?

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

但最近我了解到,它实际上与编译器或JVM无关。例如,在Serializable接口的情况下,ObjectOutputStream的方法writeObject(Object)会做类似于instanceOf Serializable的事情来检测类是否实现了Serializable&相应地抛出NotSerializableException。

一切都在代码中处理,这似乎是一个设计模式,所以我想我们可以定义我们自己的标记界面。

现在我的疑惑:

>上面提到的标记接口的定义是否在第一点出错?那么我们如何定义一个Marker接口呢?

>而不是使用instanceOf操作符为什么不能的方法是类似于writeObject(Serializable),以便有一个编译时类型检查而不是运行时?

>注释如何比标记接口更好?

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值