Kotlin 什么是;Obsever<;浮动>&引用;将lambda赋值给变量时,如在;val somevar=观察者<;浮动>;{……};
我正在学习Kotlin的Android编程。我对OO编程和lambdas有基本的了解 按照我的理解,将lambda分配给变量的一般语法如下: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初始
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 -> }