为什么 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 一样制作一个 delaration。

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

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

但也许你只是在问你是否可以把lambda放在函数括号里?您仍然可以在 Kotlin 中执行此操作,但编译器会给您一个警告,因为它的可读性较差。

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

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

相关内容

最新更新