我从一本书阅读代码,并且此方法:为什么方法返回-1?
public int getScore(String name) {
try {
//some code here
return score;
} catch (Exception e) {
e.printStackTrace();
return -1;
}
}
为什么这种方法捕获返回-1?为什么不是5?那是一个约定吗?
我从一本书阅读代码,并且此方法:为什么方法返回-1?
public int getScore(String name) {
try {
//some code here
return score;
} catch (Exception e) {
e.printStackTrace();
return -1;
}
}
为什么这种方法捕获返回-1?为什么不是5?那是一个约定吗?
您是第一个选择是什么你想返回,因为你是唯一知道如何处理返回值的人。当我想要检测错误时,我也亲自使用-1
,并且我知道很多人都这样做。
-1是一个标准的错误代码时,主叫方希望积极INT
但实际上在这种情况下,一个包裹RuntimeException
或更具体的一个会是更好的
我想这是一本初学者书,我知道我不会喜欢当我开始时抛出我的脸上的RuntimeException :) – talnicolas
@talnicolas,它的书[链接](http://www.amazon.com/JavaSpaces-Principles -Patterns-Practice-Freeman/dp/0201309556/ref = sr_1_1?ie = UTF8&qid = 1313533710&sr = 8-1) –
@talnicolas你不会喜欢的,但如果你有的话它会更好。通过你的答案来判断,你提出的幻数超越了例外,你需要一本更好的书。那本书对初学者来说很难。它适用于分布式服务器状态和算法框架Javaspaces。 – corsiKa
我假设笔者使用这个代码,以确保东西被退回,和getScore
调用者可以检查,看是否有score
正确调用。
在代码:
int theScore = getScore("My Name");
if(theScore == -1) {
// Oh no, there was an error!
}
我们可以使用-1的检查,以确保代码知道什么时候getScore
失败。
他们选择-1而不是5的原因是因为-1不是从getScore方法返回的可行分数。因此,当你调用函数时,你可以很容易地检查它是否返回-1。
如果它是一个可以实际返回-1以成功运行的函数,那么-1将是旗标指示符的糟糕选择。那么更合适的选择可能是-9999或者是荒谬的。
第一个问题是我们不知道例外是什么。捕捉每一个例外是一个非常糟糕的决定。这些例外情况是出于某种原因而抛出的,所以您应该确切地知道出了什么问题,并且可以适当地处理它。
坏:
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);
}
为什么该方法返回-1?
因为它的设计很差,所以在的任何例外。该方法本来可以通过宣布它抛出所有感兴趣的异常而更好地设计,特别是通过而不是捕获所有RuntimeExceptions
。
我没有编程该方法,我怎么知道? – Marcelo
这是一切都很好,直到有人将它用于高尔夫。例外情况优于每次“幻数”的返回值。 – corsiKa
@Marcelo,没关系,如果你没有使用progaram方法,但你仍然可以回答我的问题。我问这是否是一些约定? –