kotlin:如何重载导入的函数
kotlin: how to overload imported function
我使用 assertj。其中,它具有函数 assertThat(int)
和 assertThat(Object)
。我想添加我自己的功能
fun <T> assertThat(flux: Flux<T>) = assertThat(flux.toStream())
但我似乎不能轻易使用它。当我在测试 class MyTest
之外声明函数时,测试中的函数调用绑定到 assertThat(Object)
而不是 assertThat(Flux)
:
import org.assertj.core.api.Assertions.assertThat
//<----------- if declared here, doesn't work
class MyTest {
//<----------- if declared here, all is ok
@Test fun test() {
assertThat(Flux.just(1)).containsExactly(1)
}
}
我应该怎么做才能使用我的功能?
您可以在额外的文件中定义它并显式导入它。我认为在您的文件中定义时添加导入甚至会有所帮助,但 IDE 将此导入显示为未使用。
建议是:在 your/package/testutils.kt
中定义扩展然后导入它:
import your.package.assertThat
我使用 assertj。其中,它具有函数 assertThat(int)
和 assertThat(Object)
。我想添加我自己的功能
fun <T> assertThat(flux: Flux<T>) = assertThat(flux.toStream())
但我似乎不能轻易使用它。当我在测试 class MyTest
之外声明函数时,测试中的函数调用绑定到 assertThat(Object)
而不是 assertThat(Flux)
:
import org.assertj.core.api.Assertions.assertThat
//<----------- if declared here, doesn't work
class MyTest {
//<----------- if declared here, all is ok
@Test fun test() {
assertThat(Flux.just(1)).containsExactly(1)
}
}
我应该怎么做才能使用我的功能?
您可以在额外的文件中定义它并显式导入它。我认为在您的文件中定义时添加导入甚至会有所帮助,但 IDE 将此导入显示为未使用。
建议是:在 your/package/testutils.kt
中定义扩展然后导入它:
import your.package.assertThat