为什么方法返回-1?

时间:2011-08-16 21:44:15

标签: java return-value

我从一本书中读取代码并使用此方法:

public int getScore(String name) {
  try {
     //some code here
     return score;
  } catch (Exception e) {
     e.printStackTrace();
     return -1;
  }
}

为什么catch中的这个方法返回-1?为什么不5?这是一些惯例吗?

6 个答案:

答案 0 :(得分:11)

当调用者期望一个正int

时,

-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);
}