知识大全 在Eclipse 3.1体验J2SE 5.0新特性四(图)

Posted

篇首语:我认为知识是一切能力中最强的力量。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 在Eclipse 3.1体验J2SE 5.0新特性四(图)相关的知识,希望对你有一定的参考价值。

在Eclipse 3.1体验J2SE 5.0新特性四(图)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   Documented 这个注释(Annotation)将作为public API的一部分      Inherited 假设注释(Annotation)定义的时候使用了Inherited 那么如果这个注释(Annotation)修饰某个class 这个类的子类也被这个注释(Annotation)所修饰      注释的应用    下面各小节显示了在哪些情况下可以使用注释以及如何使用注释      动态查找注释    当我们定义好了注释以后 我们可以开发一些分析工具来解释这些注释 这里通常要用到Java的反射特性 比如说我们希望找到某个对象/方法/域使用了哪些注释 或者获得某个特定的注释 或者判断是否使用某个特定的注释 我们可以参考下面这个例子     这个例子中定义了两个注释 TODO和TOFORMATE 在MyCalculator类中 TODO用来修饰方法calculateRate 而TOFORMATE用来修饰类变量concurrency和debitDate 而在类TestCalculator的main函数中 通过Java反射特性 我们查找到使用这些注释的类变量和方法 清单 清单 分别显示这些类的定义     清单 TODO注释的定义    @Target(ElementType METHOD)  @Retention(RetentionPolicy RUNTIME)    public @interface TODO   int priority() default ;      清单 TOFORMATE的定义    @Target(ElementType FIELD)  @Retention(RetentionPolicy RUNTIME)    public @interface TOFORMATE         清单 使用注释的类MyCalculator    public class MyCalculator   boolean isReady;  @TOFORMATE double concurrency;  @TOFORMATE Date debitDate;  public MyCalculator()   super();      @TODO  public void calculateRate()  System out println( Calculating );        清单 动态查找注释    public class TestCalculator   public static void main(String[] args)   MyCalculator cal = new MyCalculator();  cal calculateRate();  try   Class c = cal getClass();  Method[] methods = c getDeclaredMethods();    for (Method m: methods)   // 判断这个方法有没有使用TODO  if (m isAnnotationPresent(TODO class))  System out println( Method +m getName()+ : the TODO is present );      Field[] fields = c getDeclaredFields();  for (Field f : fields)   // 判断这个域有没有使用TOFORMATE  if (f isAnnotationPresent(TOFORMATE class))  System out println  ( Field +f getName()+ : the TOFORMATE is present );     catch (Exception exc)   exc printStackTrace();          下面我们来运行这个例子 这个例子的运行结果如图 所示     运行结果和我们先前的定义是一致的 在运行时 我们可以获得注释使用的相关信息    >   >    在我们介绍了什么是注释以后 你可能会想知道注释可以应用到什么地方呢?使用注释有什么好处呢?在下面的小节中我们将介绍一个稍复杂的例子 从这个例子中 你将体会到注释所以提供的强大的描述机制(declarative programming)      使用注释替代Visitor模式    在J SE 以前 我们在设计应用的时候 我们经常会使用Visitor这个设计模式 Visitor这个模式一般是用于为我们已经设计好了一组类添加方法 而不需要担心改变定义好的类 比如说我们已经定义了好了一组类结构 但是我们希望将这些类的对象部分数据输出到某种格式的文件中     Vistor模式的实现    使用Vistor模式 首先我们在Employee这个类中加入export方法 export方法如图 所示 Export方法接受Exporter对象作为参数 并在方法体中调用exporter对象的visit()方法    >   >    在这里我们定义了一个Exporter抽象类 我们可以通过继承Exporter类 重写其visit方法来实现不同格式的文件输出     图 种给出visit方法的实现是一个简单的例子 如果要实现输出成XML格式的 可以定义Exporter子类 XMLExporter 如果希望输出成文本的可以定义TXTExporter 但是这样做不够灵活的地方在于 如果Employee加入其他的域变量 那么相应的visitor类也需要进行修改 这就违反了面向对象Open for Extension close for Modification的原则     使用注释替代Vistor模式    使用注释(Annotation) 也可以完成数据输出的功能 首先定义一个新的注释类型 @Exportable 然后定义一个抽象的解释器ExportableGenerator 将Employee 对象传入解释器     在解释器中 查找哪些域使用了Exportable这个注释(Annotation) 将这些域(Field)按照一定格式输出 图 给出了Exportable注释的定义     清单 注释Exportable的定义    @Target(ElementType FIELD)  @Retention(RetentionPolicy RUNTIME)  @Inherited  public @interface Exportable     清单 清单 中给出了包含数据的这些类的定义以及这些类是如何使用注释Exportable的 图 定义了Main函数 使用ExporterGenerator来产生输出文件 清单 给出了使用注释来实现这一功能的两个类 ExporterGenerator和TXTExporterGenerator     其中ExporterGenerator定义了一个基本的框架 而TXTExporterGenerator继承了ExporterGenerator 并且重写了outputField方法 在这个方法中实现了特定格式的输出 用户可以继承这个ExporterGenerator 并且实现其中的抽象方法来定义自己期望的格式     清单 Employee的类定义    public abstract class Employee   public abstract String getName();  public abstract String getEmpNo();  public Employee()   super();        清单 Regular的类定义    public class Regular extends Employee  @Exportable String name;  @Exportable String address;  @Exportable String title;  @Exportable String phone;  @Exportable String location;  @Exportable Date onboardDate;  @Exportable ArrayList team;  String empNo;    public Regular(String name String address String title String phone   String location Date date)   super();  this name = name;  this address = address;  this title = title;  this phone = phone;  this location = location;  onboardDate = date;  team = new ArrayList();      public void addMemeber(Employee e)  team add(e);      @Override  public String getName()   // TODO Auto generated method stub  return name;     cha138/Article/program/Java/ky/201311/27990

相关参考

知识大全 在Eclipse 3.1体验J2SE 5.0新特性二(图)

在Eclipse3.1体验J2SE5.0新特性二(图)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 在Eclipse 3.1体验J2SE 5.0新特性七(图)

在Eclipse3.1体验J2SE5.0新特性七(图)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 在Eclipse 3.1体验J2SE 5.0新特性八(图)

在Eclipse3.1体验J2SE5.0新特性八(图)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 Eclipse3.1中体验J2SE5.0之泛型(组图)

Eclipse3.1中体验J2SE5.0之泛型(组图)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 J2SE5.0新特性示例---泛型

J2SE5.0新特性示例---泛型  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  简介  泛型其

知识大全 J2SE(TM) 5.0 语言特性

J2SE(TM)5.0语言特性  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  [C风格格式化输出

知识大全 Eclipse 3.1中用注释单元测试框架(图)

Eclipse3.1中用注释单元测试框架(图)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  这

知识大全 Eclipse 3.1 WTP Web程序支持Beehive

Eclipse3.1WTPWeb程序支持Beehive  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 使用JRockit 5.0运行BEA Workshop/Eclipse

使用JRockit5.0运行BEAWorkshop/Eclipse  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一

知识大全 Eclipse 3.2 Java开发新特征全面体验

Eclipse3.2Java开发新特征全面体验  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  引