【问题标题】:How to pass functional interface operation as parameter in Kotlin?如何在 Kotlin 中将功能接口操作作为参数传递?
【发布时间】:2018-08-19 08:40:43
【问题描述】:

鉴于 Java 中的这个函数式接口:

public interface Condition<T> {
   boolean check(T target);
}

该接口产生的操作可以作为参数传递给类的构造函数:

new ValidationRule<>(description,problem,target-> target.length() >= 2)

第三个参数是一个条件接口,其中要执行的操作被明确指定为:

target -> target.length() >= 2

我无法在 Kotlin 中复制此模式。如何在 kotlin 中做到这一点?是否有特定于 kotlin 的方法来执行此操作。

PS 我是 Kotlin 的新手。

【问题讨论】:

  • 您是否阅读过文档中的“lambdas”和“higher order functions”章节?
  • @TimCastelijns 是的,我做到了,但我仍然无法理解这种模式,并且该文档中指定的模式可以以类似的方式使用!也许我只是没看懂
  • 这里有很多例子展示了语法:kotlinlang.org/docs/reference/lambdas.html。你至少尝试过什么吗?什么?

标签: java lambda kotlin functional-interface


【解决方案1】:

应该很简单

typealias Condition<T> = (T) -> Boolean

class ValidationRule<T>(val description: T, val problem: T, val condition: Condition<T>) 

val validationRule = ValidationRule(description, problem, { target -> target.length() >= 2 }) 

【讨论】:

  • 如果接口在Java中已经存在,那么你不需要typealias。
  • 感谢您的回答!问题不在于从一种语法转换为另一种语法,问题在于参数不会接受 lambda 表达式作为参数。
  • 您可能需要指定, problem, Condition&lt;SomeType&gt; { target -&gt;
猜你喜欢
  • 2017-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-02
  • 1970-01-01
  • 2011-12-04
  • 1970-01-01
相关资源
最近更新 更多