Java 中的动态、反射式 SignalHandler
如果 sun.misc.Signal
可用,如何安装信号处理逻辑?
背景 我的第一代代码假定信号处理可用性,看起来像这样:
class MyApp {
public static void main(String[] args) {
...
Signal.handle(term_sig, new SignalHandler() {
public void handle(Signal sig) { ... }
});
...
}
}
我相信我了解如何反思性测试和使用信号处理程序 - Class.forName("sun.misc.Signal")
,反射调用Signal.handle
,等等。
我的冲动只是用动态获取的 SignalHandler 类实例化另一个匿名内部类,但我认为这只是一厢情愿的语法。
How do I install signal handling logic iff sun.misc.Signal
is available?
Background
First generation of my code, which assumed signal handling availability, looked something like this:
class MyApp {
public static void main(String[] args) {
...
Signal.handle(term_sig, new SignalHandler() {
public void handle(Signal sig) { ... }
});
...
}
}
I believe I understand how to reflectively test for and use signal handlers -- Class.forName("sun.misc.Signal")
, reflectively call Signal.handle
, and so forth.
My impulse was simply to instantiate another anonymous inner class with the dynamically obtained SignalHandler
class, but I think that's just wishful syntax.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您需要使用动态代理来实现 SignalHandler 接口。剩下的只是基本的反思。
更新
以下是您的操作方法。注意,我省略了需要包装所有这些的 try-catch
You need to use a Dynamic Proxy to implement the SignalHandler interface. The rest is just basic reflection.
Update
Here's how you do it. Note, I've omitted the try-catch that needs to wrap all of this