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

移除Java代码中的Lambda表达式:Eddystone Beacon扫描代码改造求助

移除Lambda表达式的替代实现

你这段代码里的Lambda表达式是用来实现Observer<List<Beacon>>接口的onChanged方法,核心作用是监听Beacon扫描结果的变化。下面是去掉Lambda后的等价代码:

beaconManager.getRegionViewModel(myRegion).getRangedBeacons().observe(this, new Observer<List<Beacon>>() {
    @Override
    public void onChanged(List<Beacon> beacons) {
        noBeacons.setText(String.valueOf(beacons.size()));

        for (Beacon beacon : beacons) {
            if (uuids.contains(beacon))
                continue;
            uuids.add(beacon);
            if (beacon.getServiceUuid() == 0xfeaa && beacon.getBeaconTypeCode() == 0x00) {
                // This is a Eddystone-UID frame
                Identifier namespaceId = beacon.getId1();
                Identifier instanceId = beacon.getId2();
                logthis("I see a beacon transmitting namespace id: " + namespaceId +
                        " and instance id: " + instanceId +
                        " approximately " + beacon.getDistance() + " meters away.");
            }
        }
    }
});

关键说明:

  • 原代码里的beacons -> { ... } Lambda,本质是Java 8+对单方法接口(函数式接口)的简化写法,这里简化了Observer接口的匿名内部类实现
  • 替换后的匿名内部类需要显式声明实现Observer<List<Beacon>>,并重写唯一的抽象方法onChanged
  • onChanged方法的参数beacons和原Lambda的参数完全对应,方法体代码和原Lambda里的逻辑完全一致

内容的提问来源于stack exchange,提问作者Chris Costa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 19:36:11