我的Java程序有一个返回List的方法。它使用各种SQL查询填充列表。在某些情况下,数据可能不存在。在那种情况下,我要抛出异常。由于它是一个列表,列表可能包含有效数据。是否可以获取列表以及捕获例外?
public List<Student> getStudentInfo(){
//Contains some static info like name, dob of a Student
List<Student> students = getStudentStaticInfo();
try{
for (Student student: students){
student.setTotalMarks(getStudentMark(student.getId()));
...
}
catch(FailedToFetchDataException e) {
throw new Exception("Failed to fetch data");
} finally {
return students;
}
}
在这种情况下,该方法返回有效学生信息列表。但是在例外的情况下,我无法找到答案。
有没有办法处理这两种方法,获取有效信息以及获得特殊情况。
答案 0 :(得分:6)
一旦抛出Exception,您的方法就会停止,否则它将不得不处理多个异常。你可以这样做。
public List<Student> getStudentInfo(
BiConsumer<FailedToFetchDataException, Student> handleError) {
//Contains some static info like name, dob of a Student
List<Student> students = getStudentStaticInfo();
for (Student student: students) {
try{
student.setTotalMarks(getStudentMark(student.getId()));
...
} catch(FailedToFetchDataException e) {
handleError.accept(e, student);
}
}
return students;
}
答案 1 :(得分:3)
您可以让调用者传入List对象:
public void getStudentInfo(List<Student> list){
...
}
在方法内部,您使用结果填充列表,如果发生错误,最后会抛出异常。
因此,调用者会收到错误通知,并且仍然返回有效数据。
答案 2 :(得分:1)
您可以创建overrides
FailedToFetchDataException
的自定义例外,并附加私人字段,例如Student
和List<Student>
您可以这样做:
CustomException e = new CustomException(msg);
e.setStudents(list);
throw e;
答案 3 :(得分:1)
执行此操作的一种方法是创建自己的异常,例如:
public class MyException extends Exception {
private List<Student> list;
public myException(List<Student> list) {
this.list = list;
}
public List<Student> getList() {
return list;
}
public void setList(List<Student> list) {
this.list = list;
}
}
当你抓住Exception
FailedToFetchDataException
但是,当您抓住FailedToFetchDataException
答案 4 :(得分:0)
如果您仍然可以在异常场景中使用数据,那么您可以将列表传入该方法,即将数据插入到该方法中。例如:
public List<Student> getStudentInfo(List<Student> studentResults){
//Contains some static info like name, dob of a Student
List<Student> students = getStudentStaticInfo();
try{
for (Student student: students){
student.setTotalMarks(getStudentMark(student.getId()));
studentResults.add(student);
...
}
catch(FailedToFetchDataException e) {
throw new Exception("Failed to fetch data");
} finally {
return students;
}
}
现在studentResults
将填充以下任一项:
如果您不管setTotalMarks
是否提出异常,您都喜欢所有学生记录,也可以在您的致电网站拨打getStudentStaticInfo
。