跳到主要内容

Java 特有语法糖

本页只介绍 Java SDK 独有的便捷写法:把已有 start() / stop() 包成 try-with-resources。它们不是新功能,旧 API 全部保留。


PnSScope(try-with-resources)​

PnSService 已实现 AutoCloseable:退出 try 调 close(),关掉会话。那不是本页的糖。

PnSScope 只管 start / stop:

  • 进入作用域 start(),离开 stop()。
  • 不替代 close(),会话还在。
  • 没有 started() 方法;是否已启动看 getService().isStarted()。
写法调用
标准 APIdevice.start(); … device.stop();
语法糖try (PnSScope scope = PnSScope.of(device)) { ... }
import com.darra.pns.service.PnSService;
import com.darra.pns.sugar.PnSScope;

try (PnSService device = new PnSService()) {
try (PnSScope scope = PnSScope.of(device)) {
// start() 已调
} // 内层 close() → stop()
} // 外层 close() 关会话

PnSScope.close() 幂等;of() 里 start() 失败则不返回半开 scope,不进入业务块。离开作用域的 close() 走 stopChecked() 判停用结果,没停成会抛 PnSServiceException(原因取 getLastError()),不会把失败的停止当成优雅关闭。

类别成员类型读写说明
构造PnSScope.of(service)PnSScope静态方法立即 start();失败不返回半开 scope
访问getService()PnSService只读包装的会话,不转移所有权
启停close()—方法stopChecked(),不调 service.close();停用失败抛 PnSServiceException

何时用​

  • 一段临时启停:进入 Start、离开 Stop,避免漏调。
  • 长时间保持运行:不要用 PnSScope,自己 start() / stop()。
  • 只关会话:外层 try (PnSService …) 即可,不必套 PnSScope。