为什么下面的注解在 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 的标记。
我想使用 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 的标记。