generics - Kotlin:构造函数中可变参数的可变参数
问题描述
我正在尝试实现 Filter 类。我的第一个版本是关于这个问题的版本:Kotlin vararg of A to vararg of B
那时我没有注意到用谓词构造时的递归性,所以我正在寻找另一种实现它的方法。
我已将其更改为此类声明:class Filter<in T>(vararg val predicates: (T) -> Boolean)
我试图让这个其他构造函数工作:
constructor(vararg filters: Filter<T>) : this(/* do something */)
我不知道如何将过滤器的可变参数(包含谓词可变参数)映射到具有每个过滤器中所有谓词的谓词可变参数,特别是考虑到我无法调用过滤器类中的任何函数,因为它没有在那个时候被初始化。
另外,有没有更好的方法来实现我想要得到的东西(一个可以用谓词数组或类本身的实例数组创建的类)?
解决方案
也许是这样的:
typealias Predicate<T> = (T) -> Boolean
class Filter<T> {
private val pred: MutableList<Predicate<T>> = mutableListOf()
constructor(vararg val predicates: Predicate<T>) {
predicates.forEach { pred.add(it) }
}
constructor(vararg filters: Filter<T>) {
filters.forEach { pred.addAll(it.pred) }
}
}
fun main(args: Array<String>) {
val f1 = Filter<String>({true}, {true})
val f2 = Filter<String>(f1, f1)
}
推荐阅读
- html - Flex 不为移动响应而包装
- python - 使用 Youtube-dl embed 将视频和音频下载为单个文件
- html - 角度自定义css类未出现在视图中
- laravel - Composer 已经安装,但是当我想在 laravel 中使用 cmd 创建一个新项目时,发现以下错误
- xamarin - ios中每1分钟后台工作可能吗?
- html - 想要在css中对齐同一行中的两个单词
- javascript - 在 React、Redux-Form 和 GraphQL 中选择输入中的 onChange 事件从数据库中查询
- r - R合并部分匹配
- c# - 如何使用计划任务打印文件
- spring-boot - Camel 不会终止具有最大空闲秒数属性的 Java 进程(Spring-Boot)