我有一个设置,我在其中从java类(ProductService)调用Groovy类(Product)的生成构造函数(@TupleConstructor)。 IDE显示生成的构造函数和用于工作的编译。 但是现在,由于未知原因,编译失败,因为编译器不再找到参数化构造函数:
ProductService.java:31: error: constructor Product in class Product cannot
be applied to given types;
required: no arguments
found: String,boolean,boolean,float
reason: actual and formal argument lists differ in length
这是我目前的gradle(2.4)设置:
apply plugin: 'groovy'
apply plugin: 'java'
project.sourceCompatibility = 1.8
project.targetCompatibility = 1.8
sourceSets.main.java.srcDirs = []
sourceSets.main.groovy.srcDir 'src/main/java'
...
dependencies {
compile 'org.codehaus.groovy:groovy-all:2.4.+'
testCompile 'org.spockframework:spock-core:1.0-groovy-2.4'
}
Groovy类:
@TupleConstructor
class Product {
String name
boolean bool1
boolean bool2
float price
}
Java类中的构造函数调用(无法编译):
...
products.add(new Product("Parliament", true, false, 10.50F));
...
答案 0 :(得分:1)
<强>分析:强>
这对我来说就像一个联合编译问题。很可能转换@TupleConstructor在Groovy创建.java存根文件之后运行,导致java编译部分失败。它之前可能有用,因为你将groovy部分独立编译,然后重用现有的类文件(不干净)。遗憾的是,这是存根生成器的限制,并且如果转换应该保持在同一阶段,那么实际上没有办法解决Groovy中的问题。
<强>解决方案:强>