【发布时间】:2012-06-08 01:33:01
【问题描述】:
如果我有下面的功能,有两种选择
private MyObject findBlank() {
for (int i = 0; i < pieces.length; i++) {
if(pieces[i].isBlank()){
return pieces[i];
}
}
return null;
}
private MyObject findBlank() {
for (int i = 0; i < pieces.length; i++) {
if(pieces[i].isBlank()){
return pieces[i];
}
}
throw new NoSuchFieldError("No blank piece found!");
}
从这个方法中我知道它应该总是返回一个对象“片段”之一总是isBlank() == true,最后返回 null 只是为了取悦编译器。既然是这种情况,我的代码如果返回 null 无论如何都不会工作,那么抛出异常是否正确?
我的选择是:
- 返回 null 并且应用程序在某些极端情况下会收到 NullPointerException
- 返回 null 并使用 (myObject != null) 检查包装该方法的使用
- 抛出会在运行时将其炸毁的异常
我想我要问的是,这是抛出异常的正确位置吗?即,如果它陷入这种情况,我无能为力。这是归类为“异常”还是我应该检查我的方法返回的内容(这使我的代码看起来很糟糕)。如果我知道它不应该返回 null 那么我应该抛出异常对吗?
另外我将如何选择什么异常,或者扩展一个并抛出我自己的?
【问题讨论】:
-
“两者都没有”的建议没有吸引力吗? :-)
-
@missingfaktor 我在 Android 中编码,所以无法引入其他重型框架
-
明白。对于它的价值,这个特定的抽象并不是那么繁重,如果你觉得它有用,可以添加only the required part。
-
好吧,我相信抛出异常是最好的选择。你永远不应该返回 null 。相反,您可以做的是在 try-catch 块中调用此方法,并确保在抛出异常时在 catch 块中执行某些操作。就最佳实践而言,您还可以让调用此方法的父类向上游传递异常,如果需要,可以在 UI 级别显示。
标签: java exception coding-style null