使用javac编译时编译错误

时间:2015-10-08 08:22:42

标签: grails

我有一个我正在尝试编译的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
}

}

2 个答案:

答案 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方法。

  1. static Object getConstraints()
  2. static void setConstraints(Object)
  3. Java类FicheClassA继承自Groovy类AbstractBaseEntity并添加方法static java.lang.Object getConstraints()。由于Groovy和Java允许两个具有相同名称和参数的方法存在于同一个类中(不同的返回类型不计算),结果是编译器错误。

    我不知道为什么Java编译器坚持AbstractBaseEntity.getConstraints()的返回类型是Map。它应该是Object。您可以尝试将其更改为Map中的FicheClassA

答案 1 :(得分:0)

我找到了问题的根源,但我不知道如何解释它......

为了记录,FicheClassA的未使用的导入(在类中没有引用并且编译器指示我没有使用)是在另一个类中进行的。

当我删除此导入时,项目的编译工作正常......

现在的问题是为什么?