【问题标题】:Creating an Exception for a method [duplicate]为方法创建异常[重复]
【发布时间】:2018-08-15 16:02:11
【问题描述】:

您好,我还是编程新手,我最近了解了异常以及定义异常比使用通用异常更好。我进行了研究,并且了解了创建异常的基本思想,例如使用 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);
        }
    }

}

我不知道从哪里开始创建和异常。所以基本上我的问题是。在这些情况下,是定义和异常还是使用通用的更好?

对不起,如果我问了一个不清楚的问题,我只是想了解是否需要为诸如此类的方法定义异常,如果抛出异常,则没有明确的区域。

【问题讨论】:

  • 这取决于,如果发生意外情况,您想在哪里中断方法的执行以及为什么?
  • 请编辑格式、错别字和清晰度。我真的不知道你在问什么?

标签: java generics exception throwable


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    处理异常有多种不同的策略。一些开发人员只使用 RuntimeExceptions,一些开发人员只使用标准异常,一些开发人员定义了一些通用异常,比如每层一个,还有一些开发人员为每个可能的错误定义异常。这确实是一个偏好和风格的问题。

    可以这样创建异常:

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

    可以这样扔:

    throw new MyException();
    

    然后像这样咳嗽:

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

    【讨论】:

    • 当你创建一个扩展RuntimeException的异常时要小心,因为这是一个Unchecked Exception
    • 是的,RuntimeException 是一个特例,可能不是最好的例子
    • 这很刻意。我认为检查异常是一个错误。它们造成的混乱和糟糕的代码比它们造成的好得多。在这里讨论:stackoverflow.com/questions/613954/…
    猜你喜欢
    • 1970-01-01
    • 2021-06-23
    • 2019-02-28
    • 2022-10-04
    • 2012-09-08
    • 1970-01-01
    • 2019-01-31
    • 2013-11-24
    • 1970-01-01
    相关资源
    最近更新 更多