You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

观察LiveData时应使用Lambda还是匿名类?

Lambda vs 匿名类实现LiveData Observer的显著差异

最近在使用LiveData做状态监听的时候,我发现用Lambda表达式和传统匿名类来实现Observer接口,存在很明显的差异。下面是两种实现方式的代码示例:

匿名类实现

button.setOnClickListener(e -> { 
    mainViewModel.getCounter().observe(MainFragment.this, new Observer<Integer>() { 
        @Override 
        public void onChanged(@Nullable Integer counter) { 
            android.util.Log.i("CHEOK", "Observer 3 : " + counter + ", " + this); 
        } 
    }); 
});

这里要注意,匿名类内部的this指向的是当前匿名Observer实例本身,所以日志里会输出这个Observer对象的具体引用。

Lambda表达式实现

button.setOnClickListener(e -> { 
    mainViewModel.getCounter().observe(MainFragment.this, counter -> { 
        android.util.Log.i("CHEOK", "Observer 3 : " + counter + ", " + this); 
    }); 
});

而Lambda表达式里的this则指向外部类(此处为MainFragment)的实例,这是两者最直观的差异点。除此之外,在底层实现上也有区别:匿名类会生成独立的class文件,而Lambda依赖invokedynamic指令实现,不会产生额外的class文件,在内存引用、序列化场景下的表现也有所不同。

内容的提问来源于stack exchange,提问作者Cheok Yan Cheng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:56:11