JAVA中的标记接口

    JAVA的标记接口(tagging interface 或者 marker interface),是一类没有定义接口方法的接口。没有接口方法意味着实现该接口的类无需实现接口方法,这种接口仅仅是作为一种标记,一般用来给Java虚拟机在运行时进行相关的安全性检查。

    标记接口是Java的语言特性,典型的标记接口有:Clonable,Serializable,RandomAccess,Remote等。

    (1)Clonable标记接口:当我们需要copy一个对象的时候,我们一般是直接调用对象的clone()方法。我们知道Java的顶级类Object定义了一个 protected Object clone()方法,用户不能通过对象直接调用这个方法。因此,通常的编码方案是在自定义的类中重写这个clone()方法,并修改成public访问权限:

        @Override

        public Object clone() throws CloneNotSupportedException {

            super.clone();

            // 其他字段的拷贝

        }

        Object类将clone()方法声明为protected是考虑到对象组合中的拷贝问题:Object类只能实现对象的浅拷贝,需要用户来实现继承子对象的深拷贝。Clonable标记接口的作用是通知虚拟机,用户已经处理好对象深拷贝的事情,虚拟机检查通过。如果没有申明Clonable接口,但是调用了clone()方法,虚拟机会抛出异常。

    (2)RandomAccess标记接口:这个通常用来标记集合对象可以随机访问。我们知道,对于for语句和foreach语句是有区别的,for语句需要对象具备随机访问的特性,foreach语句则只需要对象实现Iterator接口。如果一个集合对象声明了RandomAccess接口,那么我们就可以根据如下语句判断,使用for语句来随机访问集合对象,进而优化代码:

            if (anObject instanceof RandomAccess) { // 随机访问anObject }

        (3)Serializable标记接口:这个接口用来标识该类对象可以被序列化。如果没有声明该接口,类对象在被序列化和反序列化过程中,JVM虚拟机抛出异常。

        (4)Remote标记接口:Remote标记接口主要用来通知JAVA虚拟机该类所包含的方法可以从非本地虚拟机上调用。如果不声明该接口,进行远程调用的时候,JVM抛出异常。

转载于:https://my.oschina.net/yepanl/blog/1584920

Java ,使用一个接口来给一个类打上某种标记接口被称为标记接口(Marker Interface),也称为标识接口标记接口是一种非常简单但又非常有用的技术,它允许程序员在不增加任何方法的情况下,为某个类或对象打上标记,以便在程序运行时识别出它们的特定属性或行为。 标记接口没有任何方法定义,它只是一个空接口,例如: ```java public interface MyMarkerInterface { // 这个接口没有任何方法定义 } ``` 在程序使用标记接口时,只需要让需要被标记的类实现这个接口即可,例如: ```java public class MyClass implements MyMarkerInterface { // MyClass 实现了 MyMarkerInterface 接口 } ``` 在程序,可以通过 instanceof 关键字来判断某个对象是否实现了某个标记接口,例如: ```java if (myObject instanceof MyMarkerInterface) { // myObject 实现了 MyMarkerInterface 接口 } ``` 标记接口的主要作用是为了让程序员在运行时识别出某个类或对象的特定属性或行为,它通常用于以下几种情况: 1. 序列化:Java 的序列化机制要求被序列化的类必须实现 java.io.Serializable 接口,这个接口就是一个标记接口,它没有任何方法,只是用来标记一个类可以被序列化。 2. 标识某个对象的属性:例如,java.rmi.Remote 接口就是一个标记接口,它用来标识某个对象是可远程调用的。 3. 简化代码:标记接口可以作为一种简化代码的方式,用来代替标记类。例如,可以定义一个 EmptyMarker 接口,用来标记某些对象为空,而不是定义一个专门的 EmptyMarker 类。 需要注意的是,标记接口虽然没有任何方法定义,但是它的存在本身就有一定的意义,因此在定义标记接口时需要仔细考虑其含义和用途,避免滥用标记接口造成代码混乱。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值