这是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这样的贬义。
答案 0 :(得分:3)
这只是两种语言在编写lambda上的语法差异。
不幸的是,Java lambdas是在已经设计了原始语言之后很久才添加的,因此为了向后兼容,它很难阅读。
但是也许您只是问是否可以将lambda放在函数括号内?您仍然可以在Kotlin中执行此操作,但是编译器会向您发出警告,因为它的可读性较低。
val postalCode: LiveData<String> = Transformations.switchMap(addressInput, {
address -> repository.getPostCode(address) })
另外,您的第一段代码不是函数声明,而是属性分配。您的Kotlin属性在类初始化时将其分配一次,而您的Java方法每次调用时都会创建一个新实例。