问题描述
如下代码。问题在注释里描述了public static List<ProfileEntity> getProfiles(String dir){File dirFile = new File(dir);if(dirFile.isFile()) dirFile = dirFile.getParentFile();final File[] fList = dirFile.listFiles();List<ProfileEntity> plist = null;if(fList != null){plist = new ArrayList<ProfileEntity>();for(File f : fList){if(!f.getName().endsWith(".xml")) continue;try {// 此处的GetProfile方法抛出异常,但整个循环不能因为它的异常而中断,必须循环到最后。当循环完成之后,方法返回那些没有出现异常的数据,也需要把异常抛给上层。// 这个,要怎么实现?请各位对异常熟悉的朋友解答一下。先谢谢了。 ProfileEntity pe = getProfile(f);pe.setFileName(f.getName());plist.add(pe);} catch (ParseException e) {Log.e("AndroidExam", "Error of Parser : "+e.getMessage());continue; }}}return plist;} 问题补充:AngelAndAngel 写道
解决方案
你也可以把plist作为个参数传进来List是引用类型,类似如下:public static void main(String[] args) {List list = new ArrayList();asdf.ss(list);System.out.println(list.get(0));}public static void ss(List list ){list.add("a");} } return plist; }
解决方案二:
要不就这样public static List<ProfileEntity> getProfiles(String dir){ File dirFile = new File(dir); if(dirFile.isFile()) dirFile = dirFile.getParentFile(); final File[] fList = dirFile.listFiles(); List<ProfileEntity> plist = null; if(fList != null){ plist = new ArrayList<Object>(); for(File f : fList){ if(!f.getName().endsWith(".xml")) continue; try { // 此处的GetProfile方法抛出异常,但整个循环不能因为它的异常而中断,必须循环到最后。当循环完成之后,方法返回那些没有出现异常的数据,也需要把异常抛给上层。 // 这个,要怎么实现?请各位对异常熟悉的朋友解答一下。先谢谢了。 ProfileEntity pe = getProfile(f); pe.setFileName(f.getName()); plist.add(pe); } catch (ParseException e) { Log.e("AndroidExam", "Error of Parser : "+e.getMessage()); plist.add(e); } } } return plist; } 回到外面后,for(Object o : plist) { if(o instanceof ProfileEntity) { xxxxxxxx } else { xxxxxx }}
解决方案三:
直接设置一个数组保存 exception 在catch里
解决方案四:
用个字段标识下,如果捕获的异常了先不抛出方法最后抛出这个异常就行啊
解决方案五:
你说的异常返回给上层是什么意思? 是需要仅仅文字说明还是什么?你原先的代码中应该可以将不抛异常的plist返回给上层,如果你需要异常的内容,你可以从上层传递一个变量用来记录你的异常,并在catch中改变这个变量的值,例如你传入一个Lisr errLlist 的变量,在catch中就可以用 errList.add(...)记录日常,在上层该方法完成后,直接读取errList的值即可
解决方案六:
在catch中自己构造错误的提示返回啊