WEB开发网
开发学院软件开发Java Classworking 工具箱: 注释(Annotation)与 ASM 阅读

Classworking 工具箱: 注释(Annotation)与 ASM

 2010-03-18 00:00:00 来源:WEB开发网   
核心提示: 在清单 6 中,需要重写的惟一方法就是 visitEnd() 方法,Classworking 工具箱: 注释(Annotation)与 ASM(9),该方法在所有的已有类信息都已经被访问之后调用,所以它对于添加新内容非常方便,而其他的则只使用注释本身,Run 类创建带示例数据的 Customer

在清单 6 中,需要重写的惟一方法就是 visitEnd() 方法。该方法在所有的已有类信息都已经被访问之后调用,所以它对于添加新内容非常方便。我已经用 visitEnd() 方法向正在处理的类添加 toString() 方法。在代码生成中,我已经添加了一些用于精密地格式化 toString() 输出的特性,但是基本原理很简单 —— 只是循环遍历字段数组,生成代码,该代码首先向 StringBuffer 实例追加前导文本,然后追加实际字段值。

因为当前的代码将只使用 J2SE 5.0(由于使用了 instrumentation 方法来截获 classloading),所以我本应该使用新的 StringBuilder 类作为 StringBuffer 的更有效的等价物。我之所以选择使用以前的方案,是因为下一篇文章中我将使用该代码进行一些后续工作,但是您应该记住 StringBuilder 以便用于您自己的特定于 J2SE 5.0 的代码。

运行 ToString

清单 7 展示了 ToString 注释的一些测试类。我对实际注释使用了混合样式,在一些情况中指定了名值对,而其他的则只使用注释本身。Run 类创建带示例数据的 Customer 类实例,并打印出 toString() 方法调用的结果。

清单 7. ToString 的测试类

package com.sosnoski.dwct; 
import com.sosnoski.asm.ToString; 
public class Customer 
{ 
  @ToString(order=1, text="#") private long m_number; 
  @ToString() private String m_homePhone; 
  @ToString() private String m_dayPhone; 
  @ToString(order=2) private Name m_name; 
  @ToString(order=3) private Address m_address; 
   
  public Customer() {} 
  public Customer(long number, Name name, Address address, String homeph, 
    String dayph) { 
    m_number = number; 
    m_name = name; 
    m_address = address; 
    m_homePhone = homeph; 
    m_dayPhone = dayph; 
  } 
  ... 
} 
... 
public class Address 
{ 
  @ToString private String m_street; 
  @ToString private String m_city; 
  @ToString private String m_state; 
  @ToString private String m_zip; 
   
  public Address() {} 
  public Address(String street, String city, String state, String zip) { 
    m_street = street; 
    m_city = city; 
    m_state = state; 
    m_zip = zip; 
  } 
  public String getCity() { 
    return m_city; 
  } 
  public void setCity(String city) { 
    m_city = city; 
  } 
  ... 
} 
... 
public class Name 
{ 
  @ToString(order=1, text="") private String m_first; 
  @ToString(order=2, text="") private String m_middle; 
  @ToString(order=3, text="") private String m_last; 
   
  public Name() {} 
  public Name(String first, String middle, String last) { 
    m_first = first; 
    m_middle = middle; 
    m_last = last; 
  } 
  public String getFirst() { 
    return m_first; 
  } 
  public void setFirst(String first) { 
    m_first = first; 
  } 
  ... 
} 
... 
public class Run 
{ 
  public static void main(String[] args) { 
    Name name = new Name("Dennis", "Michael", "Sosnoski"); 
    Address address = new Address("1234 5th St.", "Redmond", "WA", "98052"); 
    Customer customer = new Customer(12345, name, address, 
      "425 555-1212", "425 555-1213"); 
    System.out.println(customer); 
  } 
} 

上一页  4 5 6 7 8 9 10  下一页

Tags:Classworking 工具箱 注释

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接