为什么以下注释在Java中合法但在groovy中不合法?

时间:2015-01-23 22:54:45

标签: java groovy annotations jasypt

我想使用Jasypt库为我的应用程序添加加密。他们的集成页面说添加@TypeDef注释:

使用@TypeDef注释定义加密类型,该注释可以位于持久化实体类内部,也可以位于单独的package-info.java文件中的@TypeDefs声明中”:

@TypeDef(
    name="encryptedString", 
    typeClass=EncryptedStringType.class, 
    parameters= {
        @Parameter(name="encryptorRegisteredName", value="myHibernateStringEncryptor")
    }
)

但是,我注意到当我在groovy文件上尝试这个时,我收到了语法错误。

Groovy:意外令牌:} @第12行,第3列。

当我将确切的代码复制并粘贴到java文件中时,它可以正常工作。如果我删除它的参数参数,我认为参数{}参数被groovy解释为闭包。

编辑:我最终将注释移动到package-info.java但我仍然想知道为什么这在groovy中不起作用。

1 个答案:

答案 0 :(得分:5)

问题可能在于参数块:

parameters= {
    @Parameter(name="encryptorRegisteredName", value="myHibernateStringEncryptor")
}

虽然可以在java中使用花括号来为数组指定静态初始化块,但在groovy中,花括号是闭包的语法标记,这不是你想要的。我想以下可能会有效:

parameters= [
    @Parameter(name="encryptorRegisteredName", value="myHibernateStringEncryptor")
]

注意硬括号,这是匿名创建的列表/地图的groovy标记。