Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.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
Android Kotlin观察者lambda语法?_Android_Kotlin - Fatal编程技术网

Android Kotlin观察者lambda语法?

Android Kotlin观察者lambda语法?,android,kotlin,Android,Kotlin,我现在正在学习来自.NETC#的Kotlin for Android开发。我对Kotlin语法有一个问题,例如: val nameObserver = Observer<String> { newName -> nameTextView.text = newName } val nameObserver=Observer{newName-> nameTextView.text=newName } 此代码取自Android LiveData文档

我现在正在学习来自.NETC#的Kotlin for Android开发。我对Kotlin语法有一个问题,例如:

 val nameObserver = Observer<String> { newName ->

            nameTextView.text = newName
  }
val nameObserver=Observer{newName->
nameTextView.text=newName
}

此代码取自Android LiveData文档。我认为Observer是一个新对象,没有new关键字,因为它在Kotlin中不存在。我的问题是lambda部分。这是在对象中初始化的属性吗?我如何知道哪个属性在没有命名的情况下被初始化,它们是否按顺序排列?在此上下文中,什么应该是newName、nameObserver值或其他内容?

您发布的代码片段称为a。通过将其指定为lambda表达式,您正在创建接口类型为
Observer
的对象

在您的特定情况下,
newName
是传递给的参数,并且代码将其定义为
Observer
,类型为
String
,这是 之所以可以这样做,是因为Observer java接口只声明了一个方法


您可以对Kotlin 1.4+中的Kotlin接口执行此操作。

您还可以完全删除
newName->
,在这种情况下,您将使用nameTextView.text=it,其中
it
是默认分配的名称,fwiw:)感谢您的解释和文档参考。在kotlin文档中,“object”也用于语法:object:IntPredicate。在Android示例中,未使用“对象”。所以我想没有必要用“对象”符号?另外,我编写的lambda基本上覆盖了抽象的onChanged方法?是的,lambda覆盖了onChanged方法。Kotlin允许对任何对象类型(接口或抽象类)使用这种表示法,这些对象类型只有一个抽象方法(即首字母缩写SAM的来源)。如果我没有弄错的话,只有当不能通过其他方法推断类型时,才需要使用带有
object:IntPredicate
的语法