Java中的标记接口和标记注解

一、标记接口

    标识接口是没有任何方法和属性的接口.它仅仅表明它的类属于一个特定的类型,供其他代码来测试允许做一些事情.使用标记接口的唯一目的是使得可以用instanceof进行类型查询,例如:

        if(obj instanceof Cloneable) {………}

一些容器例如Ejb容器,servlet容器或运行时环境依赖标记接口识别类是否需要进行某种处理,比如serialialbe接口标记类需要进行序列化操作.

        java.io.Serializable

未实现此接口的类将无法使其任何状态序列化或反序列化.为保证serialVersionUID 值跨不同java编译器实现的一致性,序列化类必须声明一个明确的serialVersionUID .

        java.lang.Cloneable

表明Object.clone()方法可以合法地对该类实例进行按字段复制.实现此接口的类应该使用公共方法重写Object.clone(它是受保护的).如果在没有实现Cloneable 接口的实例上调用Object clone 方法,则会导致抛出CloneNotSupportedException 异常.

        java.util.RandomAccess

用来表明其支持快速(通常是固定时间)随机访问.此接口的主要目的是允许一般的算法更改其行为,从而在将其应用到随机或连续访问列表时能提供良好的性能.

        java.rmi.Remote

Remote 接口用于标识其方法可以从非本地虚拟机上调用的接口.任何远程对象都必须直接或间接实现此接口.只有在“远程接口”(扩展java.rmi.Remote 的接口)中指定的这些方法才可远程使用.

二、标记注解

    标记注解是特殊类型的注解,其中不包含成员。标记注解的唯一目的就是标记声明,因此,这种注解作为注解而存在的理由是充分的。确定标记注解是否存在的最好方式是使用isAnnotationPresent()方法,该方法是由AnnotatedElement接口定义的。

    下面是一个使用标记注解的例子。因为标记注解不包含成员,所以只需要简单地判断其是否存在即可。

import java.lang.annotation.*;
import java.lang.reflect.*;

// A marker annotation.
@Retention(RetentionPolicy.RUNTIME)
@interface MyMarker { }
class Marker {
  // Annotate a method using a marker.
  // Notice that no ( ) is needed.
  @MyMarker
  public static void myMeth() {
    Marker ob = new Marker();
    try {
      Method m = ob.getClass().getMethod("myMeth");
 
      // Determine if the annotation is present.
      if(m.isAnnotationPresent(MyMarker.class))
        System.out.println("MyMarker is present.");
 
    } catch (NoSuchMethodException exc) {
      System.out.println("Method Not Found.");
    }
  }
  public static void main(String args[]) {
    myMeth();
  }
}

输出如下所示,@MyMarker确实是存在的:

MyMarker is present.

在这个程序中,应用@MyMarker时后面不需要有圆括号。因此,只通过名称即可应用@MyMarker,如下所示:

@MyMarker

提供空的圆括号虽然不是错误,但不是必需的。

转自:http://www.zoio.info/basic/357.html#codesyntax_1

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值