即使出现问题,我也想避免发布时发生崩溃。这就是为什么我不想抛出我知道不会被处理的异常。在调试模式下,我想这样做,因为在调试过程中出现问题时获得尽可能多的噪音是有好处的。
问题是,如果我做类似的事情:
如果(DEBUG_MODE)抛出e;
然后我需要指定该方法抛出异常,但我不想这样做,因为在发行版中这不是真的。
处理这个问题的最佳方法是什么?
编辑
聚苯乙烯
我的问题不清楚抱歉。
就我而言,断言并不是很方便。问题是我已经知道出了问题,所以我没有什么可以断言的。为了更清楚地说明我有意想不到的例外。当然你可以说:编写代码不要出现意外的异常。但如果出现问题,我不希望应用程序崩溃。现在我添加了一个这样的函数:
public static void unexpectedException(String string, Exception e) {
if (Build.DEBUG) {
MyApp.errorLog(string);
throw new RuntimeException(e);
} else
MyApp.errorLog(string, e);
}
Run Code Online (Sandbox Code Playgroud)
虽然你所有的答案都是正确的,但我会选择最接近我所做的一个
PS2
断言不太方便的另一种情况是当您实现类似状态的模式时。如果对于某些状态,您希望永远不会调用某个方法......
您可以使用断言。
public void methodSomething(Object o){
assert (o != null); // will throw AssertionError during development
...
}
Run Code Online (Sandbox Code Playgroud)
但你确实应该捕获这些异常并处理它们(: