gpt4 book ai didi

编译期间缺少 Groovy 生成的构造函数

转载 作者:行者123 更新时间:2023-12-01 14:37:58 24 4
gpt4 key购买 nike

我有一个设置,其中我从 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'
}

常规类:

@TupleConstructor
class Product {
String name
boolean bool1
boolean bool2
float price
}

Java 类中的构造函数调用(编译失败):

...
products.add(new Product("Parliament", true, false, 10.50F));
...

最佳答案

分析:

这在我看来像是一个联合编译问题。很可能转换 @TupleConstructor 在 Groovy 确实创建了 .java stub 文件之后运行,导致 java 编译部分失败。它以前可以工作,因为您独立编译了 groovy 部分,然后重用了现有的类文件(不干净)。遗憾的是,这是 stub 生成器的一个限制,如果转换应该保持在同一阶段,那么在 Groovy 中并没有真正解决这个问题的方法。

解决方案:

  • 使用 groovy-eclipse 批处理编译器
  • 不要使用在 stub 生成器之后运行的转换
  • 在 gradle 中创建一个多模块构建,它将独立编译 groovy 部分

关于编译期间缺少 Groovy 生成的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30641790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com