为什么下面的注解在 Java 中合法但在 groovy 中不合法?

Why is the following annotation legal in Java but not in groovy?

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

"使用@TypeDef 注释定义加密类型,它可以在持久实体内部class 或在单独包中的@TypeDefs 声明中-info.java文件":

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

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

"Groovy:意外标记:}@第 12 行,第 3 列。"

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

解释为闭包

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

问题可能出在参数块上:

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

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

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

注意硬括号,这是 groovy 匿名创建的 lists/maps 的标记。