我从一本书中读取代码并使用此方法:
public int getScore(String name) {
try {
//some code here
return score;
} catch (Exception e) {
e.printStackTrace();
return -1;
}
}
为什么catch中的这个方法返回-1?为什么不5?这是一些惯例吗?
答案 0 :(得分:11)
-1是标准错误代码
但实际上在这种情况下,包裹的RuntimeException
或更具体的一个会更好
答案 1 :(得分:4)
我假设作者使用此代码确保返回某些内容,getScore
的来电者可以检查score
是否正确调用。
在代码中:
int theScore = getScore("My Name");
if(theScore == -1) {
// Oh no, there was an error!
}
我们可以使用check for -1来确保代码知道getScore
何时失败。
答案 2 :(得分:3)
为什么方法返回-1?
因为在任何例外情况下设计非常糟糕。通过声明抛出感兴趣的异常,特别是不捕获所有RuntimeExceptions
,可以更好地设计该方法。
答案 3 :(得分:2)
您是唯一一个选择要返回的人,因为您是唯一知道如何处理该返回值的人。当我想要检测到错误时,我个人也使用-1
,而且我知道很多人都在做同样的事情。
答案 4 :(得分:2)
他们选择-1而不是5的原因是因为-1不是从getScore方法返回的可行分数。因此,当您调用该函数时,您可以轻松检查它是否返回-1。
如果它是一个可以在成功运行中实际返回-1的函数,则-1将是标志指示符的不良选择。那么,更合适的选择可能是-9999或者荒谬的东西。
答案 5 :(得分:2)
第一个问题是我们不知道例外是什么。抓住每个例外是一个非常糟糕的决定。抛出这些异常是有原因的,因此您可以确切地知道出了什么问题,并且可以适当地处理它。
为:
public int getScore(String name) {
try {
int score = scores.getScoreForName(name);
return score;
} catch (Exception e) { // catches everything
e.printStackTrace();
return -1;
}
}
边缘更好......
public int getScore(String name) {
try {
int score = scores.getScoreForName(name);
return score;
} catch(NameNotFoundException) {
e.printStackTrace();
return -2; // now we know what happened, not just a general error
} catch (Exception e) { // catches everything
e.printStackTrace();
return -1; // generally error
}
}
好多了:
/**
* Get the score for a given name. Will throw a runtime exception if the
* name doesn't exist.
* @param name The name to get the score for
* @return the score for the name
* @throws NameNotFoundException if the name doesn't exist in the database.
*/
public int getScore(String name) {
return scores.getScoreForName(name);
}