例外还是投入建设?

时间:2016-09-27 18:49:03

标签: java constructor exception-handling liferay

我的构建函数的模型类可以抛出异常:

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));
}

所以我的问题是,我应该在构造函数中还是在对象的初始化时捕获异常?我非常新手,所以我真的需要你的帮助。

2 个答案:

答案 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);
}