1

一个非常菜鸟的问题。我正在编写一个方法,它确实接受两个数组,然后从中创建一个哈希映射。例如:

HashMap<String,String> createHash(String[] arr1, String[] arr2){
  //the logic is very simple
   HashMap<String,String> hshmp= new HashMap<String,String>();
   for (int i=0; i < arr1.length;i++){
    hshmp.put(arr1[i],arr2[i]);
  }
  return hshmp
}

现在我要检查的第一件事是 arr1 和 arr2 的尺寸 ..它们是否相同

如果不是......那么程序退出(优雅地??详细说明??)

通常这是断言???正确的??但我认为java中的断言是你必须启用的可选东西?

有什么好的方法来解决这个问题?

4

3 回答 3

3

异常和断言之间的选择在某种程度上取决于该方法的使用方式。

断言旨在验证内部假设 - 如果您可以控制所有调用,createHash并且由于代码的逻辑,不可能使用不同长度的输入调用该方法,那么断言可能是合适的。想法是,您将在开发期间启用断言以验证您的假设,然后出于性能原因在生产中禁用它们。

对于可能接受您无法控制的用户输入的方法,或者是公共 API 的一部分,或者许多开发人员在内部使用的库,那么异常会更合适,因为保证会抛出异常。在公共方法中,您需要更加主动地检查输入,而抛出异常通常是这样做的。

于 2013-09-11T17:12:25.883 回答
2

IllegalArgumentException 非常适合此目的:

if (arr1.length != arr2.length)
{
    throw new IllegalArgumentException("Arrays do not have the same length: " + 
                                        arr1.length + " != " + arr2.length);
}

我建议抛出异常,因为这样,您的方法的调用者可以决定发生这种情况时要做什么。调用者可以通过在IllegalArgumentExceptionSystem.exit(-1);的主体中放置一条语句或调用您的自定义终止过程(在其中保存更改、资源、设置等)来退出应用程序。catch

仅供参考:是的,断言是您必须手动启用的功能。


或者,您可以打印出错误的堆栈跟踪并立即退出。但我不推荐:

if (arr1.length != arr2.length)
{
    Exception e = new IllegalArgumentException("Arrays do not have the same length: " + arr1.length + " != " + arr2.length);
    e.printStackTrace();
    System.exit(-1);
}
于 2013-09-11T17:04:40.703 回答
1

你可以这样做:

HashMap<String,String> createHash(String[] arr1, String[] arr2) throws IllegalArgumentException {
  //the logic is very simple
  if(arr1 != null && arr2 !=null && arr1.length == arr2.length){
     HashMap<String,String> hshmp= new HashMap<String,String>();
     for (int i=0; i < arr1.length;i++){
        hshmp.put(arr1[i],arr2[i]);
     }
     return hshmp;
  }
  else
     throw new IllegalArgumentException("Arrays are null or not equally sized");
}
于 2013-09-11T17:09:41.943 回答