提问者:小点点

为什么Kotlin函数在某些情况下的表述与Java不同


这是一个Kotlin函数声明

 val postalCode: LiveData<String> = Transformations.switchMap(addressInput) {
                    address -> repository.getPostCode(address) }

这是一个Java函数声明

public final LiveData<String> postalCode(){
        Transformations.switchMap(addressInput, (address) -> {
            return repository.getPostCode(address);
         })};

1-为什么不能在Kotlin中声明如下:

... .(addressInput, (address) -> {
            return repository.getPostCode(address);
         })

,请说明如何才能像Java那样做一个延迟。


共1个答案

匿名用户

这只是两种语言在如何编写lambda方面的语法差异。

不幸的是,Java lambdas是在原始语言已经设计好很久之后添加的,因此为了向后兼容,它有点难读。

但也许您只是在问是否可以将lambda放在函数括号内? 您仍然可以在Kotlin中这样做,但是编译器会给您一个警告,因为它的可读性较差。

val postalCode: LiveData<String> = Transformations.switchMap(addressInput, {
                address -> repository.getPostCode(address) })

另外,您的第一段代码不是函数声明,而是属性赋值。 Kotlin属性在类初始化时分配一次,而Java方法在每次调用时创建一个新实例。