3

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

时髦的:

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;
    }
}
4

2 回答 2

2

确保按以下顺序编译和运行:

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

  • groovy Test

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

于 2013-07-26T03:23:08.817 回答
1

正如dmahapatro指出的那样,这是一个编译顺序问题。所以我阅读了混合 Java 和 Groovy 应用程序并稍微修改了我的程序。我创建了Pet.java

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

然后我将我的 Groovy 类重命名PetPetImpl并让它扩展了新Pet接口。现在 Java 代码可以独立于 Groovy 进行编译,所以它可以编译,然后 Groovy 代码编译并且一切正常。


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

于 2013-07-26T03:41:26.963 回答