Java: 未处理的异常
Java: unhandled exception
我想处理一个异常,但 Eclipse 编辑器给了我一些我不理解的提示。这是方法的代码:
public Collection<String> listOfFriends(String codePerson)
throws NoSuchCodeException {
Collection<String> s = new LinkedList<>();
try {
people.get(codePerson).getFriendsCodes().forEach( code -> s.add(getPerson(code)));
} catch (Exception e) {
e.printStackTrace();
}
return s;
getPerson 在哪里:
public String getPerson(String code) throws NoSuchCodeException {
if(!people.containsKey(code)){
throw new NoSuchCodeException();
}
return people.get(code).getCode() + " " + people.get(code).getName() + " " + people.get(code).getSurname();
例外情况是:
public class NoSuchCodeException extends Exception {
NoSuchCodeException(){}
NoSuchCodeException(String msg){
super(msg);
}
}
Eclipse returns listOfFriends
方法中的两个错误,一个在调用 getPerson()
的地方,说 "Unhandled exception type NoSuchCodeException",另一个在 catch 行,说 "Unreacheable catch block for NoSuchCodeException. This exception is never thrown from the try statement body".
PS:我在 listOfFriends
方法中添加了 try 和 catch 只是为了尝试解决问题,因为据我所知,鉴于该方法在其声明中具有 "throws NoSuchCodeException",这不应该是强制性的,对吧?
提前致谢。
问题是由 lambda 函数引起的。 forEach
需要的函数接口没有声明任何类型的检查异常:看看 java.util.function.Consumer
。那是第一个问题发生的地方,第二个问题只是第一个问题的结果。
您应该 NoSuchCodeException
扩展 RuntimeException
或向您的 lambda 添加 try catch
块。我建议你坚持第一个解决方案,除非 NoSuchCodeException
是在正常情况下可能发生的事情。
也看看这个问题:Java: checked vs unchecked exception explanation.
您将不得不在 forEach
块内捕获该异常。由于未声明 [=11=] 处理异常,因此您必须一路帮助它。
另一种方法是将您的异常更改为未经检查的异常,但这可能不适用于您的特定用例。
try {
people.get(codePerson).getFriendsCodes().forEach(code -> {
try {
s.add(getPerson(code));
} catch (NoSuchCodeException e) {
e.printStackTrace();
}
});
} catch (Exception e) {
e.printStackTrace();
}
我想处理一个异常,但 Eclipse 编辑器给了我一些我不理解的提示。这是方法的代码:
public Collection<String> listOfFriends(String codePerson)
throws NoSuchCodeException {
Collection<String> s = new LinkedList<>();
try {
people.get(codePerson).getFriendsCodes().forEach( code -> s.add(getPerson(code)));
} catch (Exception e) {
e.printStackTrace();
}
return s;
getPerson 在哪里:
public String getPerson(String code) throws NoSuchCodeException {
if(!people.containsKey(code)){
throw new NoSuchCodeException();
}
return people.get(code).getCode() + " " + people.get(code).getName() + " " + people.get(code).getSurname();
例外情况是:
public class NoSuchCodeException extends Exception {
NoSuchCodeException(){}
NoSuchCodeException(String msg){
super(msg);
}
}
Eclipse returns listOfFriends
方法中的两个错误,一个在调用 getPerson()
的地方,说 "Unhandled exception type NoSuchCodeException",另一个在 catch 行,说 "Unreacheable catch block for NoSuchCodeException. This exception is never thrown from the try statement body".
PS:我在 listOfFriends
方法中添加了 try 和 catch 只是为了尝试解决问题,因为据我所知,鉴于该方法在其声明中具有 "throws NoSuchCodeException",这不应该是强制性的,对吧?
提前致谢。
问题是由 lambda 函数引起的。 forEach
需要的函数接口没有声明任何类型的检查异常:看看 java.util.function.Consumer
。那是第一个问题发生的地方,第二个问题只是第一个问题的结果。
您应该 NoSuchCodeException
扩展 RuntimeException
或向您的 lambda 添加 try catch
块。我建议你坚持第一个解决方案,除非 NoSuchCodeException
是在正常情况下可能发生的事情。
也看看这个问题:Java: checked vs unchecked exception explanation.
您将不得不在 forEach
块内捕获该异常。由于未声明 [=11=] 处理异常,因此您必须一路帮助它。
另一种方法是将您的异常更改为未经检查的异常,但这可能不适用于您的特定用例。
try {
people.get(codePerson).getFriendsCodes().forEach(code -> {
try {
s.add(getPerson(code));
} catch (NoSuchCodeException e) {
e.printStackTrace();
}
});
} catch (Exception e) {
e.printStackTrace();
}