Java中有很多例外的糟糕设计吗?

Luc*_*ier 7 java exception-handling exception

我目前正在用Java包装一个C库,使其更容易使用并在OO-Programming中工作.C库使用错误代码(int返回值)和Out-Parameter进行数据操作.我不一定是错误代码的粉丝,所以我想创建一些自定义的异常类,如果我的库检测到错误代码而不是"成功",我可以抛出这些类.

唯一的问题是每个方法可能引发的异常数量非常高(可以从每个C库函数返回一些错误代码,例如"Device_Not_Connected").自从我上次用Java编程以来已经有一段时间了,所以,我真的不知道Java中的Exceptions是什么情况.

  1. 抛出很多不同异常的方法是不是很糟糕?
  2. 我是否必须处理异常,或者有没有办法简单地忽略它?
  3. 如果我可以忽略一个异常,它是否会冒出调用树(例如在Python中)?
  4. 除了错误代码和无操作之外,Java中的异常还有其他替代方法吗?

小智 3

抛出大量不同异常的方法是否是糟糕的设计?

如果使用得当显然不会!异常基本上只是一种可能的返回状态,超出了该方法的技术目的范围。例如,如果该方法应从设备读取值 null 或应使用返回类型返回任何值。但是,当您无法读取返回值时,抛出自定义的 DeviceNotConnectedException 来表明出现问题,而不是简单地返回 null 是 100% 的最佳实践。如果有 10 件事情可能出错,那么可以列出 10 种可能的例外情况。

我是否必须处理异常,或者有没有办法简单地忽略它?

当您没有捕获异常时,您必须在调用此方法的每个方法、该方法调用者等中使用“public void myMethod() throws MyExcp {..}”等声明发生异常的方法。如果你将它交给主方法并且没有在那里处理,那么程序将会崩溃。

如果我可以忽略异常,它是否会在调用树中冒泡(例如在Python中)?

往上看。

除了错误代码和空操作之外,Java 中还有其他异常的替代方法吗?

据我所知,还没有,但我不是专家。

  • 如果扩展 RuntimeException,则不必在方法签名中显式声明它们,并且它们会自动在调用链中向上冒泡。IMO,除了可以通过某种有意义的方式恢复的异常之外,RuntimeExceptions 比检查异常更可取。 (2认同)