Java批注的发明起因及代码应用实例(1)

  批注能够消除样板代码,让源代码的可读性更高,并能提供级别更高的错误检查。从EJB3到JUnit4,哪里都在使用它。本文就将告诉你如何使用它。

  Java5向Java引入了批注(Annotations),它的使用迅速成为现代Java开发中不可缺少的一部分。在正式开始介绍它之前,看看为什么要发明批注,这是非常值得的。

  自从Java诞生之日起,人们就一直在解决它初期忽视了的一些问题:缺少元数据;缺乏将Java以外的代码嵌入到Java源代码文件里的能力等。当Java面市的时候,针对这些问题而推出的JavaDoc终于让它变完整了。JavaDoc使用了在代码里专门标记注释的概念,从而让它能够提取出额外的信息,说具体点就是文档,并将它装换成为我们熟悉的JavaDoc文档。这是一项简单的技术,人人都可以使用。首先会有Doclet,目的是让人们扩展文档的输出。然后是Xdoclet,它像标记一样使用JavaDoc来生成代码,从而将整个过程变得轻而易举。这部分是对于J2EE的复杂性的回应。J2EE原来依靠很多样板代码(boilerplate code)把对象捆绑到J2EE框架里。但是这样方案都有一些问题。首先,注释里的标记从来都不会进入最终的源代码,所以除非你生成代码来反映这些标记,否则你无法在运行期间找到它。其次,它会把整个预处理层加到(在理想状况下应该是)一个简单编译过程里。最后,基于注释的标记在编译期间并不是很容易检查,也无法轻易被很多IDE检查;如果你把注释标记拼写错了,编译器是不会注意到的,编译器只会关注那些它知道确切名字的标记。

  要解决这所有的问题,Java新增了批注。批注是用于Java语言的本机元数据标记。它们的输入严格与Java语言的其他部分类似,可以通过反映被发现,更容易地让IDE和编译器的编写者管理。现在就让我们看一些被批注的代码吧,我们先从BaseExample开始,它是一个简单类,只带有一个方法――myMethod:

    public class BaseExample {

        public BaseExample() {}

        public void myMethod {

            System.out.println("This is the BaseExample");

        }

    }

  现在,我们想要扩展BaseExample并替代myMethod。下面就是完成这一任务的Example1代码:

    public class Example1 extends BaseExample {

        public Example1() {}

        @Overridepublic void myMethod() {

            System.out.println("This is the Example1");

        }

    }

  你可能会认为“难道语言的扩展没有解决这个问题,额外的关键字可能会吗”,是的,它可能已经实现了这一点,但是这不仅没有给语言带来任何灵活性,还会导致很多源代码兼容性的问题。批注这种方式避免了改变Java语言本身(当然除了增加了@markup),并且还能够放在代码的不同部分里,而不仅仅是在标记方法里。关于批注还有一点是,你可以创建自己的批注标记,这正是我们马上要讨论的内容。想一想下面这个问题:我们有一些简单的Java Beans程序,它们都带有不同的字符串字段。我们希望能够有一些通用窗体显示代码,它们能够用其他显示提示(比如宽度)来正确地标示这些字段。现在我们可以编写一个超类,它能够提出这个数据,比如说从一个在每个类里都带有一些静态支持方法的静态数组里,但是这也意味着要强制给代码分层。利用批注做到这一点就要简单得多了。现在让我们从定义FormLabel.java里的FormLabel的批注开始:

    import java.lang.annotation.*;

    @Retention(RetentionPolicy.RUNTIME)

    @Target(ElementType.METHOD)

    public@interface FormLabel {String label();

        int width() default 40;

    }

后结:http://blog.csdn.net/fatfoxz/archive/2008/02/04/2083335.aspx

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值