Kotlin 什么是;Obsever<;浮动>&引用;将lambda赋值给变量时,如在;val somevar=观察者<;浮动>;{……};

Kotlin 什么是;Obsever<;浮动>&引用;将lambda赋值给变量时,如在;val somevar=观察者<;浮动>;{……};,kotlin,lambda,Kotlin,Lambda,我正在学习Kotlin的Android编程。我对OO编程和lambdas有基本的了解 按照我的理解,将lambda分配给变量的一般语法如下: val somevar [: ( parm1-type [, parm2-type [,...] ] -> return-type ] = { [ parm1 [, parm2 [,...] ] -> ] stmt1 [; stmt2 [;...] ] } 本书中的当前示例有一个名为resultObserver的变量,该变量用lambda初始

我正在学习Kotlin的Android编程。我对OO编程和lambdas有基本的了解

按照我的理解,将lambda分配给变量的一般语法如下:

val somevar [: ( parm1-type [, parm2-type [,...] ] -> return-type ] = { [ parm1 [, parm2 [,...] ] -> ] stmt1 [; stmt2 [;...] ] }
本书中的当前示例有一个名为
resultObserver
的变量,该变量用lambda初始化:

val resultObserver = Observer<Float> { result -> resultText.text = result.toString() }
val resultObserver=Observer{result->resultText.text=result.toString()}
该语句中的
观察者
在做什么?它似乎不符合上面的语法。我错过了什么

下面是更多的编码示例,以防回答我的问题:

class MainFragment : Fragment() {
    ...
    private lateinit var viewModel: MainViewModel

    override fun onCreateView( ...
    }

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        viewModel = ViewModelProvider(this).get(MainViewModel::class.java)

        val resultObserver = Observer<Float> { result -> resultText.text = result.toString() }

        viewModel.getResult().observe( viewLifecycleOwner, resultObserver )
        ...
    }

}
class MainFragment:Fragment(){
...
私有lateinit变量viewModel:MainViewModel
重写onCreateView(。。。
}
覆盖活动创建的乐趣(savedInstanceState:Bundle?){
super.onActivityCreated(savedInstanceState)
viewModel=ViewModelProvider(this.get)(MainViewModel::class.java)
val resultObserver=Observer{result->resultText.text=result.toString()}
viewModel.getResult().observe(viewLifecycleOwner,ResultoServer)
...
}
}
class MainViewModel:ViewModel(){
...
私有变量结果:MutableLiveData=MutableLiveData()
...
fun getResult():MutableLiveData{
返回结果
}
}

您正在创建
Observer
接口的匿名实例

//Observer from documentation
public interface Observer<T> {
    /**
     * Called when the data is changed.
     * @param t  The new data
     */
    void onChanged(T t);
}

//**** traditional way ****

class FloatObserver: Observer<Float>{
    override fun onChanged(t: Float?) {
        
    }
}

val resultObserver = FloatObserver()

//**** lambda way ****
//doing it in lambda way, as interface has single method, you can use it as lambda 
val resultObserver = Observer<Float> { t ->    }
//来自文档的观察者
公共接口观察员{
/**
*数据更改时调用。
*@param t更新新数据
*/
改变后的空隙(T);
}
//****传统方式****
类:观察者{
更改后覆盖乐趣(t:浮动?){
}
}
val resultObserver=FloatObserver()
//****兰姆达路****
//以lambda的方式进行,因为接口只有一个方法,所以可以将其用作lambda
val resultObserver=观察者{t->}
//Observer from documentation
public interface Observer<T> {
    /**
     * Called when the data is changed.
     * @param t  The new data
     */
    void onChanged(T t);
}

//**** traditional way ****

class FloatObserver: Observer<Float>{
    override fun onChanged(t: Float?) {
        
    }
}

val resultObserver = FloatObserver()

//**** lambda way ****
//doing it in lambda way, as interface has single method, you can use it as lambda 
val resultObserver = Observer<Float> { t ->    }