为方法创建例外

时间:2018-03-07 14:04:30

标签: java generics exception throwable

您好我还是编程新手,我最近了解了异常以及如何定义异常比使用泛型异常更好。我已经研究过并且理解了创建异常的基本思想,例如使用String和Throwable。但是,当它像这样的代码:

public void sendEnvironmentExport(Environment env) throws Exception {

    if (details == null) {
        details = new CurrentUserDetails();
        details.setPrincipal(dao.loadUser(UserServiceImpl.SYSTEM_USERNAME));
    }

    for (String reportDescriptor : env.getExportReports()) {
        // methodName|recipient@address.com
        String[] parts = reportDescriptor.split("\\|");

        if (parts.length == 2) {
            Method m = this.getClass().getMethod(parts[0], String.class);
            m.invoke(this, parts[1]);
        } else {
            logger.warn("Ignoring invalid Environment.getExportReports.report: " + reportDescriptor);
        }
    }

}

我不知道从哪里开始创建和例外。基本上我的问题是。在这些情况下,定义和例外或使用通用的更好吗?

很抱歉,如果我问一个不明确的问题,我只是想了解是否有必要为这样的方法定义一个例外,如果抛出异常则没有明确的区域。

2 个答案:

答案 0 :(得分:1)

在大多数情况下,使用从最接近的可能的通用异常扩展的特定异常会更好,除非有预定义的Java异常,它提供了您想要提供的信息。使用自定义的原因是可以以非常特定的方式处理异常。即使一个方法可以抛出多个相似但仍然不同的自定义异常,人们可以轻松地单独处理每个异常或一次处理所有异常(通过处理超类异常)。

答案 1 :(得分:0)

处理异常有许多不同的策略。一些开发人员仅使用RuntimeExceptions,一些开发人员仅使用标准异常,一些开发人员定义一些常规异常,例如每层一个,其他人为每个可能的错误定义异常。这确实是一个偏好和阶梯的问题。

可以像这样创建一个例外:

public class MyException extends RuntimeException{
    private static final long serialVersionUID = 1L;
}

它可以像这样抛出:

throw new MyException();

并且像这样:

try {
    throw new MyException();
} catch (MyException e) {
    e.printStackTrace();
}