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

实战 Groovy: @Delegate 注释

 2009-09-28 00:00:00 来源:WEB开发网   
核心提示: 复合模式和 final 类假设您希望创建一个 AllCapsString 类,它具有 java.lang.String 的所有行为,实战 Groovy: @Delegate 注释(2),唯一的不同是 — 正如名称暗示的那样 — 值始终以大写的形式返回,String 是一个

复合模式和 final 类

假设您希望创建一个 AllCapsString 类,它具有 java.lang.String 的所有行为,唯一的不同是 — 正如名称暗示的那样 — 值始终以大写的形式返回。String 是一个 final 类 — Java 演化到尽头的产物。清单 2 证明您无法直接扩展 String:

清单 2. 扩展 final 类是不可能的

class AllCapsString extends String{
}
$ groovyc AllCapsString.groovy
org.codehaus.groovy.control.MultipleCompilationErrorsException: 
startup failed, AllCapsString.groovy: 1: You are not allowed to 
overwrite the final class 'java.lang.String'.
 @ line 1, column 1.
   class AllCapsString extends String{
   ^
1 error

这段代码无效,因此您的下一个最佳选择就是使用符合模式,如清单 3 所示:

清单 3. 对 String 类的新类型使用复合模式

class AllCapsString{
  final String body
  
  AllCapsString(String body){
    this.body = body.toUpperCase()
  }
  
  String toString(){
    body
  }
    
  //now implement all 72 String methods
  char charAt(int index){
    return body.charAt(index)
  }
  
  //snip...
  //one method down, 71 more to go...
}

因此,AllCapsString 类拥有 一个 String,但是其行为 不同于 String,除非您映射了所有 72 个 String 方法。要查看需要添加的方法,可以参考 Javadocs 中有关 String 的内容,或者运行清单 4 中的代码:

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

Tags:实战 Groovy Delegate

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