微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

@Sneaky Throws在龙目岛中的应用

如何解决@Sneaky Throws在龙目岛中的应用

我正在Java中使用lombok库,发现了一个注释:@SneakyThrows。 如文档所述:

@SneakyThrows伪造了编译器。换句话说,龙目岛不 包装或替换引发的检查异常,但使编译器 认为这是一个未经检查的异常。

因此,这是在compileTime处获取异常的旁路方法,但这不应是处理异常的正确方法,因为被旁路的异常可能会在运行时显示出怪异的行为。

因此,在哪种情况下使用@SneakyThrows意味着在哪种情况下,我们确实需要绕过任何检查的异常。

谢谢。

解决方法

添加到现有答案中。我个人不喜欢检查异常。参见以获取更多信息:https://phauer.com/2015/checked-exceptions-are-evil/

为了增加侮辱性,避免检查异常时代码会gets肿。考虑使用@SneakyThrows:

 List<Instant> instantsSneaky = List.of("2020-09-28T12:30:08.797481Z")
        .stream()
        .map(Example::parseSneaky)
        .collect(Collectors.toList());

@SneakyThrows
private static Instant parseSneaky(String queryValue) {
    return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").parse(queryValue).toInstant();
}

与非@SneakyThrows相比

 private static Instant parseNonSneaky(String queryValue) throws ParseException {
    return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").parse(queryValue).toInstant();
}

List<Instant> instantsNonSneaky = List.of("2020-09-28T12:30:08.797481Z")
        .stream()
        .map(timeStamp -> {
            try {
                return parseNonSneaky(timeStamp);
            } catch (ParseException e) {
                throw new RuntimeException(e);
            }
        })
        .collect(Collectors.toList());

因此@SneakyThrows的应用使代码更简洁。

,

在JAVA 8及更高版本中,使用lambda时尤其不容易。

  1. 主要针对Java 8的较早版本进行考虑。
  2. 其目的是故意抛出异常,例如,以进行警告。这样,其他服务/程序/代码可以标识应如何处理请求/响应流。如果您已经有了适当的机制,则无需担心。

@SneakyThrows在当前的传统应用程序开发中用处不大,可以用在某种状态机程序中,在这种情况下,有必要(尽管我没有专门知识)来确定程序的状态电流。这只是不同情况下的一个示例,可能还会更多。

,

我相信这里的目的是使编译器不需要将任何异常添加到方法声明中。

例如,如果方法是

public void throwsCheckedException() {
    throw new IOException("IO exception thrown");
}

这将导致需要一个编译时异常

public void throwsCheckedException() throws IOException {
    throw new IOException("IO exception thrown");
}

@SneakThrows注释可缓解此问题-原始方法声明为

@SneakyThrows
public void throwsCheckedException() {
    throw new IOException("IO exception thrown");
}

这不会导致编译时错误。 注意,IDE可能仍会将此错误突出显示为错误,例如,在IntelliJ中,您将需要使用Lombok插件。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。