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

编写蓝牙应用时首次遇见带实现体的DiscoveryListener实例,求解析

这是Java中的匿名内部类写法

你看到的new DiscoveryListener() {}是Java里的匿名内部类语法,专门用来快速实现接口(或继承类),不用单独写一个命名的实现类。

因为DiscoveryListener是接口,本身不能直接new出实例,匿名内部类就是在创建对象的同时,直接在大括号里实现接口要求的所有抽象方法,当场生成一个该接口的实现类对象。

你自己写的这段代码就是标准的匿名内部类用法:

DiscoveryListener listener = new DiscoveryListener() {

    public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) {
       
        devicesDiscovered.addElement(btDevice);
    }
  
    public void inquiryCompleted(int discType) {
   
        synchronized (inquiryCompletedEvent) {
            inquiryCompletedEvent.notifyAll();
        }
    }
    public void serviceSearchCompleted(int transID, int respCode) {

    }
    public void servicesDiscovered(int transID, ServiceRecord[] servRecord) {
    }
};

你在大括号里实现了DiscoveryListener接口要求的4个抽象方法,直接得到了可用的listener实例。

这种写法的优势是代码紧凑,适合那种只在当前代码块里使用、不需要复用的接口实现场景,省得额外创建一个单独的类文件。

另外要注意:

  • 匿名内部类可以访问外部类的成员变量;如果是访问局部变量,Java 8之前需要用final修饰,Java 8及之后只要变量没有被重新赋值(即"有效final")就可以直接用
  • 匿名内部类没有自己的类名,只能在创建它的地方使用,没法重复实例化

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 09:24:56