您好我正在开展一个项目。 我正在覆盖项目中大约100个类的方法,我使用地图填充一些键和值并返回地图。现在map.put()方法抛出4个异常:Null,UnsupportedOperation,IllegalArgument和ClassCast Exceptions。 所以我应该处理所有这些问题。显然我应该,是这样吗?
那么问题是我应该在每个覆盖的方法中处理这些(100个类),或者只是在方法中添加throws关键字并处理我调用这些方法的位置?
什么是更好的做法?它是一个非常关键的项目,不应该没有处理任何异常,否则它可能会崩溃许多其他事情。告诉我观看现实生活中的情景。
答案 0 :(得分:2)
通常,您应该捕获可以添加一些值的异常。捕获一个您实际上不知道如何处理它的例外是没有用的,并且可能只会模糊问题。
由于Map
定义了您应该支持的行为,因此选中的Exception不是一个选项。
由于大多数错误都是编码错误,我会在高级别处理它们,因为您无法在运行时轻松采取纠正措施,即修复是修复代码所以不会发生这种情况。
答案 1 :(得分:1)
首先,在Java中重写方法时无法修改throw子句,并且所有四个例外都是RuntimeException
,不需要throw子句。
其次,在考虑如何处理异常之前,了解何时抛出异常非常重要。并且应该忽略一些不管输入是什么而永远不会发生的异常。因此,答案取决于您在代码中使用的Map
的实现。
如果您使用HashMap
,则不会抛出四个异常中的任何一个,因此您可以忽略它们。
如果您使用TreeMap
,如果您将NullPointerException
值作为键,则会发生null
,而当您的密钥不是{的实例时,ClassCastException
会发生Comparable<T>
{1}}当前在地图中已有的键中使用。并且您应该确定天气某些输入的重写方法会导致这两个异常。如果是这样,通过抛出自定义异常来处理它们,就像其他答案一样,首选。否则你也可以忽略它们。
答案 2 :(得分:0)
最好编写一个自定义异常并抛出它。在捕捉它时设置正确的信息。 所以最终你的方法需要抛出一个例外。
答案 3 :(得分:0)
看看这个question
答案 4 :(得分:0)
好吧,如果从同一点(或点组)调用所有这些方法,那么传播从它们抛出的异常(在方法声明中添加throws
)然后处理它是一个明显的解决方案调用方法中的那些例外。通过这些方式,您可以通过单点来管理异常处理案例。
另外,所有抛出的异常都有特定的含义(就像你说你想处理从map.put()获得的那些),请考虑使用自定义异常。在这里,您有一些指导原则:Guidelines