我的构建函数的模型类可以抛出异常:
public class BookModel {
private Book book;
String authorName;
public BookModel(Book book) {
this.book = book;
try {
this.authorName = (AuthorLocalServiceUtil.getAuthor(book.getAuthorId())).getAuthorName();
} catch (PortalException | SystemException e) {
e.printStackTrace();
}
}
之后,我在这里创建新对象:
for (Book book: bookList) {
books.add(new BookModel(book));
}
所以我的问题是,我应该在构造函数中还是在对象的初始化时捕获异常?我非常新手,所以我真的需要你的帮助。
答案 0 :(得分:1)
BookModel
构造函数应抛出异常。通过在构造函数中记录异常来“吞噬”异常并继续,好像什么都不是错误可能会导致错误。
如果您认为不太可能发生这些异常,或者您认为下游调用者不太可能处理异常,您可以将它们包装在RuntimeException
中,这样就不会必须在构造函数的签名中做广告。
public BookModel(Book book) {
this.book = book;
try {
this.authorName = (AuthorLocalServiceUtil.getAuthor(book.getAuthorId())).getAuthorName();
} catch (PortalException | SystemException e) {
throw new RuntimeException(e);
}
}
答案 1 :(得分:1)
在您的特殊情况下,异常处理应该不是BookModel
的构造函数的一部分。
我假设您要创建一个具有有效BookModel
对象和作者名称的Book
实例。所以我会将构造函数修改为类似
public BookModel(final Book book, final String authorName) {
对于您尝试检索作者姓名的每个Book
个对象。如果检索出现问题,则输入catch-block。所以我会这样试试:
for (final Book book: bookList) {
String authorName =null;
try {
authorName = (AuthorLocalServiceUtil.getAuthor(book.getAuthorId())).getAuthorName();
} catch (YourException exception){
...logging, exception handling continue in loop,...
}
BookModel model = new BookModel(book, authorName);
books.add(model);
}