非常的菜鸟问题。 我正在编写一个方法,它接收两个数组,然后从中创建一个哈希映射。 例如:
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中的断言是必须启用的东西吗?
什么是解决这个问题的好方法?
答案 0 :(得分:3)
异常和断言之间的选择在某种程度上取决于如何使用该方法。
断言旨在验证内部假设 - 如果您可以控制对createHash
的所有调用,并且由于代码的逻辑,应该不可能使用不同长度的输入调用该方法,那么断言可能是恰当的。我们的想法是,您可以在开发期间启用断言来验证您的假设,然后出于性能原因在生产中禁用它们。
对于可能接受您无法控制的用户输入的方法,或者是公共API的一部分,或许多开发人员在内部使用的库的方法,那么异常会更合适,因为异常可以保证被抛出在公共方法中,您需要更加主动地检查输入,并且抛出异常通常是如何完成的。
答案 1 :(得分:2)
IllegalArgumentException非常适用于此目的:
if (arr1.length != arr2.length)
{
throw new IllegalArgumentException("Arrays do not have the same length: " +
arr1.length + " != " + arr2.length);
}
我建议抛出一个异常,因为这样,你的方法的调用者可以决定在发生这种情况时该怎么做。调用者可以通过在System.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);
}
答案 2 :(得分: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");
}