我在 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")
出现此错误:
Condition<File>({ file -> file.name.startsWith("functional_questions") }, "Description")
出现此错误:
我怎样才能成功?
最佳答案
我能想到的最好的是:
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/