WEB开发网
开发学院软件开发Java 实战 Groovy: @Delegate 注释 阅读

实战 Groovy: @Delegate 注释

 2009-09-28 00:00:00 来源:WEB开发网   
核心提示: 清单 6. 使用 @Delegate 注释将 String 的所有方法推到周围的类中classAllCapsString{@DelegatefinalStringbodyAllCapsString(Stringbody){this.body=body.toUpperCase()}Stringto

清单 6. 使用 @Delegate 注释将 String 的所有方法推到周围的类中

class AllCapsString{
  @Delegate final String body
  AllCapsString(String body){
    this.body = body.toUpperCase()
  }
  
  String toString(){
    body
  } 
}

$ groovyc AllCapsString.groovy 
$ javap AllCapsString
Compiled from "AllCapsString.groovy"
public class AllCapsString extends java.lang.Object 
       implements java.lang.CharSequence, java.lang.Comparable,
       java.io.Serializable,groovy.lang.GroovyObject{
       
    //NOTE: AllCapsString methods:   
    public AllCapsString(java.lang.String);
    public java.lang.String toString();
    public final java.lang.String getBody();    
    
    //NOTE: java.lang.String methods:
    public boolean contains(java.lang.CharSequence);
    public int compareTo(java.lang.Object);
    public java.lang.String toUpperCase();
    //snip...

然而,注意,您仍然可以调用 getBody(),从而绕过被推入到环绕的 AllCapsString 类中的所有方法。通过将 private 添加到字段声明中 — @Delegate final private String body — 可以禁止显示普通的 getter/setter 方法。这将完成转换:AllCapsString 提供了 String 的全部行为,允许您根据情况覆盖 String 方法。

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:实战 Groovy Delegate

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