【问题标题】:Throw Exception based on Exception class name根据异常类名抛出异常
【发布时间】:2018-06-06 18:55:29
【问题描述】:

我正在用 Java 实现一个面向对象的中间件。调用远程调用时,我将得到一个包含值描述或异常描述(异常类名称和消息)的响应字符串。我现在如何在我的客户端存根代码中抛出相应的异常,只知道类名(和消息)?

【问题讨论】:

  • 使用正则表达式来识别类 (Pattern.compile()) 和错误消息,然后通过将消息作为参数传递来使用反射调用类的构造函数 (Constructor.newInstance())。跨度>
  • 以这种方式创建异常实例并不是一个好主意。如果该类不存在或不支持您期望的构造函数怎么办?而是让中间件抛出它自己的异常,在这种情况下是有意义的。
  • 要求在客户端存根中抛出与服务器的对象实现所抛出的相同的 RuntimeException 类型......所以我不能抛出自定义异常。关于第一条评论:我已经知道类名和类型。您能否使用反射 API 进一步解释构造函数调用?

标签: java exception middleware


【解决方案1】:

好的,感谢反射提示,我想通了。结果如下所示:

RuntimeException ex = (RuntimeException) Class.forName(exceptionName).getConstructor(String.class).newInstance(exceptionMessage);
throw ex;

exceptionName 需要是异常的完全限定类名。

【讨论】:

    猜你喜欢
    • 2013-05-24
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    相关资源
    最近更新 更多