我有一个我正在尝试编译的grails项目。 编译项目的源文件后,编译始终会出错。我有一个“使用javac编译时出现编译错误”stacktrace,它返回了11个关于11个类的错误。
她是11个错误之一:
d:\Profiles\jMichel\AppData\Local\Temp\groovy-generated-937113616033442252-java-source\fr\myProject\blockA\FicheClassA.java:683: error: getConstraints() in FicheClassA cannot override getConstraints() in AbstractBaseEntity
public static java.lang.Object getConstraints() { return null;}
^
return type Object is not compatible with Map
仅供参考,所有这11个类彼此相关(belongsTo或hasMany或其他类型的链接),并从AbstractBaseEntity类中删除。
这是AbstractBaseEntity:
@Validateable
abstract class AbstractBaseEntity {
transient springSecurityService
Date dateCreation
String loginCreation
Date dateMaj
String loginMaj
Boolean archive = false
static mapping = {
tablePerHierarchy false
dateCreation column: 'DATE_CREATION'
loginCreation column: 'LOGIN_CREATION'
dateMaj column: 'DATE_MAJ'
loginMaj column: 'LOGIN_MAJ'
archive column: 'ARCHIVE'
}
static constraints = {
dateCreation nullable: true
loginCreation nullable: true
dateMaj nullable: true
loginMaj nullable: true
archive nullable: true
}
def beforeInsert = {
dateCreation = new Date()
loginCreation = springSecurityService?.principal instanceof String ? springSecurityService.principal : springSecurityService?.principal?.username
}
def beforeUpdate = {
dateMaj = new Date()
loginMaj = springSecurityService?.principal instanceof String ? springSecurityService.principal : springSecurityService?.principal?.username
}
}
答案 0 :(得分:0)
您的Groovy类AbstractBaseEntity
定义了一个名为 constraints 的静态Closure属性。它的定义如下:
static constraints = {
dateCreation nullable: true
loginCreation nullable: true
dateMaj nullable: true
loginMaj nullable: true
archive nullable: true
}
编译Groovy类时,Groovy编译器会为 constraints 属性添加getter / setter方法。
Java类FicheClassA
继承自Groovy类AbstractBaseEntity
并添加方法static java.lang.Object getConstraints()
。由于Groovy和Java允许两个具有相同名称和参数的方法存在于同一个类中(不同的返回类型不计算),结果是编译器错误。
我不知道为什么Java编译器坚持AbstractBaseEntity.getConstraints()
的返回类型是Map
。它应该是Object
。您可以尝试将其更改为Map
中的FicheClassA
。
答案 1 :(得分:0)
我找到了问题的根源,但我不知道如何解释它......
为了记录,FicheClassA的未使用的导入(在类中没有引用并且编译器指示我没有使用)是在另一个类中进行的。
当我删除此导入时,项目的编译工作正常......
现在的问题是为什么?