为什么Kotlin函数声明在某些情况下与Java不同

时间:2020-06-07 13:50:51

标签: android kotlin

这是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);
         })

,pleae展示了如何进行像Java这样的贬义。

1 个答案:

答案 0 :(得分:3)

这只是两种语言在编写lambda上的语法差异。

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

但是也许您只是问是否可以将lambda放在函数括号内?您仍然可以在Kotlin中执行此操作,但是编译器会向您发出警告,因为它的可读性较低。

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

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