尝试Catch或布尔检查

时间:2012-12-16 14:22:33

标签: java try-catch

假设我有以下代码:

void validate(File f) //or boolean?????
{
  ...
  try
  {
    //try to validate xml file
  }
  catch (Exception e)
  {
  }
}

...

try
{

  validate(xml_file); //validates XML file
  move(xml_file, valid_folder); //moves valid XML file to valid_folder
}
catch (Exception e)
{
  move(xml_file, error_folder); //moves invalid XML file to error_folder
}

...

我的validate()函数应该是boolean我应该检查文件是否是有效的XML文件,或catching是否会为我做这个?

4 个答案:

答案 0 :(得分:3)

不应使用例外来控制程序的正常流程。它们发生时会大大减慢执行速度。您的程序希望从无效的XML文件中排序有效的XML文件。因此,您期望出现无效的XML文件,这就是您将它们分类到不同文件中的原因。因此,您应该返回一个布尔值而不是抛出异常。

答案 1 :(得分:2)

您可能想要考虑的一个问题是单一责任原则:方法应该做好一件事。

您的验证方法至少做了三件事:

  1. 从文件中读取XML
  2. 以某种未指明的方式验证XML
  3. 根据结果将文件移动到一个或另一个文件夹
  4. 如果你打破这些,也许你会有更轻松的时间。

    如果有人想在不移动文件的情况下验证XML,该怎么办?在这种情况下,无法调用您的方法。

    即使验证也值得怀疑。如果您检查架构,则会在第一个问题上抛出异常。用户想要立刻知道所有问题吗?如果是的话,你将不得不走树,自己找出所有的错误。

答案 2 :(得分:1)

如果它返回boolean,它看起来会更清晰,更简单:

if(validate(xml_file)) move(xml_file, valid_folder);
else move(xml_file, error_folder);

但是,您的解决方案(抛出异常)可能会包含大量有关可以传递给move()方法的抛出异常的信息。或者,validate()方法返回int,其中每个值指示特定状态。

答案 3 :(得分:1)

你可以把它作为布尔值。您可以在validate方法的开头添加布尔变量(最初为true),在内部catch中可以将其设置为false。在函数的末尾,返回布尔变量值。因此,如果try块中的代码遇到异常,则通过将boolean变量设置为false来处理它,以便在遇到异常时返回false,否则返回true。