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

实战 Groovy: @Delegate 注释

 2009-09-28 00:00:00 来源:WEB开发网   
核心提示: 清单 4. 输出 String 类的所有方法String.class.methods.eachWithIndex{method,i->println"${i}${method}"}//output0publicbooleanjava.lang.String.conten

清单 4. 输出 String 类的所有方法

String.class.methods.eachWithIndex{method, i-> 
  println "${i} ${method}"
}
//output
0 public boolean java.lang.String.contentEquals(java.lang.CharSequence)
1 public boolean java.lang.String.contentEquals(java.lang.StringBuffer)
2 public boolean java.lang.String.contains(java.lang.CharSequence)
...

将 72 个 String 方法手动添加到 AllCapsString 并不是一种明智的方法,而是在浪费开发人员的宝贵时间。这就是 @Delegate 注释发挥作用的时候了。

了解 @Delegate

@Delegate 是一个编译时注释,指导编译器将所有 delegate 的方法和接口推到外部类中。

在将 @Delegate 注释添加到 body 之前,编译 AllCapsString 并使用 javap 进行检验,看看大部分 String 方法是否缺失,如清单 5 所示:

清单 5. 在使用 @Delegate 前使用 AllCapsString 

$ groovyc AllCapsString.groovy 
$ javap AllCapsString
Compiled from "AllCapsString.groovy"
public class AllCapsString extends java.lang.Object 
       implements groovy.lang.GroovyObject{
    public AllCapsString(java.lang.String);
    public java.lang.String toString();
    public final java.lang.String getBody();
    //snip...

现在,将 @Delegate 注释添加到 body,如清单 6 所示。重复 groovyc 和 javap 命令,将看到 AllCapsString 具有与 java.lang.String 相同的所有方法和接口。

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

Tags:实战 Groovy Delegate

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