kotlin - 如何使用带有通用接口(interface)和其他参数的构造函数在 Kotlin 中创建对象

标签 kotlin assertj

我在 Kotlin 中使用 AssertJ 并尝试使用 AssertJ-Condition。

构造函数定义如下:

Condition(Predicate<T> predicate, String description, Object... args)

http://joel-costigliola.github.io/assertj/core-8/api/org/assertj/core/api/Condition.html

但我无法正确地创作。我尝试了以下(以及更多,为简洁起见,我省略了):
Condition<File>({ it.name.startsWith("functional_questions") }, "Description")

出现此错误:enter image description here
Condition<File>({ file -> file.name.startsWith("functional_questions") }, "Description")

出现此错误:
enter image description here

我怎样才能成功?

最佳答案

我能想到的最好的是:

Condition<File>(Predicate<File> { file -> file.name.startsWith("functional_questions") }, "description")

编辑:您的代码不起作用,因为默认情况下 Kotlin lambda 没有实现所需的接口(interface)。如果您运行以下代码:
val predicate1 = { file: File -> file.name.startsWith("functional_questions") }
val predicate2 = Predicate<File> { file -> file.name.startsWith("functional_questions") }

predicate1::class.java.interfaces.forEach { println(it) }
println() //new line to separate outputs
predicate2::class.java.interfaces.forEach { println(it) }

你得到以下输出:
interface kotlin.jvm.functions.Function1

interface java.util.function.Predicate

区别很明显。

关于kotlin - 如何使用带有通用接口(interface)和其他参数的构造函数在 Kotlin 中创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51401910/

相关文章:

asynchronous - 如何使用协程传递结果?

java - 当测试方法开始之前文件不存在时,为什么 getResourceAsStream() 返回 null?

java - AssertJ本地构建时没有这样的方法错误

kotlin - AssertJ: `ignoringFields` 是不是忽略了所有提供的字段?

java - AssertJ JUnitSoftAssertions 和 Guava 断言

android - 我无法通过其 ID 将任何内容从 activity_main.xml 导入 MainActivity.kt,例如 textview 或 button

安卓数据绑定(bind) : @BindingAdapter in Kotlin does not recognize lambdas

android - ItemTouchHelper onMove 更新元素位置

kotlin - `Nothing` 有什么用?

java - 使用assertJ方法 containsOnly() 比较自定义对象的数组