Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 绑定的可调用引用不能与Reactor Subscribe一起使用_Kotlin - Fatal编程技术网

Kotlin 绑定的可调用引用不能与Reactor Subscribe一起使用

Kotlin 绑定的可调用引用不能与Reactor Subscribe一起使用,kotlin,Kotlin,自1.1以来,Kotlin已经绑定了可调用引用。在1.1.3中,我想我应该能够使用以下方法访问add方法: val elements = mutableListOf<Int>() Flux.just(1, 2, 3, 4) .log() .subscribe(elements::add) val elements=mutableListOf() 通量.只是(1,2,3,4) .log() .subscribe(元素::添加) 但是,这会引发一个错误: 我不确定

自1.1以来,Kotlin已经绑定了可调用引用。在1.1.3中,我想我应该能够使用以下方法访问
add
方法:

val elements = mutableListOf<Int>()

Flux.just(1, 2, 3, 4)
    .log()
    .subscribe(elements::add)
val elements=mutableListOf()
通量.只是(1,2,3,4)
.log()
.subscribe(元素::添加)
但是,这会引发一个错误:


我不确定这个错误在这个特定的例子中意味着什么。我可以毫无问题地使用
.subscribe({elements.add(it)})
,但我不应该使用
elements::add
版本吗?

Kotlin函数引用表达式与java方法引用表达式不同。返回类型
Any
与返回类型
单元
不兼容

错误来自
可变列表#添加(Int)
方法的返回类型(布尔值)与
订阅
方法的参数类型
(Int)->单元
不兼容。 所以你只能这样使用lambda表达式

当参数类型和返回类型都与函数兼容时,可以在某处使用
list::add
。例如:

val add1:(Int) -> Boolean = list::add; // MutableList.add(Int);
val add2:(Int,Int) -> Unit = list::add; // MutableList.add(Int,Int);

重新表述并详细说明另一个答案:问题是需要一个
使用者
,它接受一个元素,并且在其单个方法中不返回任何内容。Kotlin中的相应功能类型为
(T)->Unit

然而,
MutableList
接口中描述的方法具有类型
(T)->Boolean
:如果成功添加元素,则返回true(这是为了支持不能包含重复项的接口实现)

一个可能的解决方案是添加一个扩展方法,该方法在不返回任何内容的情况下将元素添加到
MutableList

fun <T> MutableList<T>.addItem(element: T): Unit {
    this.add(element)
}

n、 b:这是lambda的返回类型不是单位的问题。返回类型推断将在1.2中更改,以便本示例中的代码能够正确工作。请看:我只是想指出,我发现1.2可能允许将lambdas强制到单元。谢谢你的信息!很酷,这将是对语言的一个很好的补充,乍一看,它似乎与任何现有的用例都没有冲突。只是想注意,我发现1.2和1.2可能会允许强制lambdas到单元。谢谢你的信息!
Flux.just(1, 2, 3, 4)
        .log()
        .subscribe(elements::addItem)