编写蓝牙应用时首次遇见带实现体的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
相关产品推荐
相关产品推荐

