当我在下面的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;
}
}
答案 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代码编译,一切正常。
main
方法并创建一个直接引用主类的运行方式配置(Groovy脚本){ {1}},我不再遇到这个问题,不必对我最初发布的代码进行任何更改(即没有Java com.example.Test
接口)。