Groovy代码找不到Java构造函数

时间:2013-07-26 02:47:35

标签: java groovy interop

当我在下面的Groovy代码中运行main方法时,我得到一个groovy.lang.GroovyRuntimeException: Could not find matching constructor for: com.example.Person(java.lang.String, com.example.Pet)。这是为什么?我正在使用最新版本的Groovy / Grails工具套件。

Groovy的:

package com.example

import groovy.transform.TypeChecked

@TypeChecked
class Test {
    static main(args) {
        Pet fido = new Pet(name: 'Fido', nickname: 'Scruffy')
        Person dave = new Person('Dave', fido)
    }
}

@TypeChecked
class Pet {
    String name
    String nickname
}

爪哇:

package com.example;

public class Person {
    private String name;
    private Pet pet;

    public Person(String name, Pet pet) {
        this.name = name;
        this.pet = pet;
    }
}

2 个答案:

答案 0 :(得分:2)

确保按此顺序编译并运行:

  • groovyc Pet.groovy
  • javac Person.java
  • groovyc Test.groovy

  • groovy Test

如果遵循上述顺序,它对我有用。在GGTS中,确保按预期编译/构建项目,以确保构建依赖类。

答案 1 :(得分:1)

正如dmahapatro指出的那样,这是一个编译顺序问题。所以我读了Mixed Java and Groovy Applications并略微修改了我的程序。我创建了Pet.java

public interface Pet {
    public String getName();
    public String getNickname();
}

然后我将我的Groovy类Pet重命名为PetImpl并让它扩展新的Pet接口。现在,Java代码可以独立于Groovy进行编译,因此它确实可以,然后Groovy代码编译,一切正常。


编辑:我已经玩过这个了,我发现如果我在Groovy文件中右键单击我的main方法并创建一个直接引用主类的运行方式配置(Groovy脚本){ {1}},我不再遇到这个问题,不必对我最初发布的代码进行任何更改(即没有Java com.example.Test接口)。