kotlin - Groovy 无法识别 spock 中的 kotlin 构造函数
问题描述
我有用 kotlin 编写的应用程序。现在我想用 spock 和 groovy 写一些测试。我遇到的问题是,groovy 无法识别带有可选参数(?)的 kotlin 构造函数,并且发生错误:“构造函数无法应用于”
我正在使用 gradle 来构建项目。
buildscript {
ext.kotlin_version = '1.2.50'
repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
group 'com.pl'
version '1.0-SNAPSHOT'
apply plugin: 'groovy'
apply plugin: 'kotlin'
repositories {
mavenCentral()
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
testCompile(
'org.codehaus.groovy:groovy-all:2.4.4',
'org.spockframework:spock-core:1.1-groovy-2.4',
)
}
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
解决方案
默认情况下,带有可选参数的 Kotlin 构造函数作为一个构造函数生成,该构造函数采用 Java 代码中的所有参数,因此可选性仅适用于 Kotlin 代码。但是,有一个注释,@JvmOverloads
您可以将其应用于构造函数和函数,以使 Kotlin 编译器发出多个 Java 签名,从而使代码在 Java 方面也是可选的。
这是 Kotlin 和 Java 的示例(我不太了解 Groovy,但我相信它会类似地工作):
class Foo @JvmOverloads constructor(
val bar : String = "test"
)
public static void main(String args[])
{
Foo foo = new Foo(); // bar is set to test
System.out.println(foo.getBar()); // will print test
}
推荐阅读
- python - 新手:因为我在范围内不增加
- python - sklearn 和从头开始的不同 Kmean 结果
- reactjs - useEffect 仅适用于第一次更新/渲染
- matlab - 如何解锁 Simulink 库以使其可编辑?
- javascript - 悬停时的高效 JS 事件监听器
- c - 如果在块中引用了具有内部链接的变量,我是否需要在该块中使用 extern 关键字?
- python - 用 scapy 关闭 pcap 文件
- php - 我正在尝试使用“干预\图像库”保存图像。我发现一个错误图像源不可读
- python - 如何使用 tkinter for python 使用自定义字体打印 list = ['a','b','c']
- visual-studio-2019 - 在 Visual Studio 2019 中发布不工作