Java 特有语法糖
本页只介绍 Java SDK 独有的便捷写法:把已有
start()/stop()包成 try-with-resources。它们不是新功能,旧 API 全部保留。
PnSScope(try-with-resources)
PnSService 已实现 AutoCloseable:退出 try 调 close(),关掉会话。那不是本页的糖。
PnSScope 只管 start / stop:
- 进入作用域
start(),离开stop()。 - 不替代
close(),会话还在。 - 没有
started()方法;是否已启动看service().isStarted()。
| 写法 | 调用 |
|---|---|
| 标准 API | device.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() 幂等;stop() 失败不往外抛。of() 里 start() 失败则不返回半开 scope,不进入业务块。
| 类别 | 成员 | 类型 | 读写 | 说明 |
|---|---|---|---|---|
| 构造 | PnSScope.of(service) | PnSScope | 静态方法 | 立即 start() |
| 访问 | service() | PnSService | 只读 | 包装的会话,不转移所有权 |
| 启停 | close() | — | 方法 | stop(),不调 service.close() |
何时用
- 一段临时启停:进入 Start、离开 Stop,避免漏调。
- 长时间保持运行:不要用
PnSScope,自己start()/stop()。 - 只关会话:外层
try (PnSService …)即可,不必套PnSScope。