当前位置: 首页 > 知识库问答 >
问题:

如何处理lambda中的检查异常?[副本]

乌灿
2023-03-14

我有以下代码段。

package web_xtra_klasa.utils;

import java.util.Arrays;
import java.util.Properties;
import java.util.function.Function;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class Main {
    public static void main(String[] args) throws Exception {
        Transport transport = null;
        try {
            final Properties properties = new Properties();
            final Session session = Session.getDefaultInstance(properties, null);
            final MimeMessage message = new MimeMessage(session);
            final String[] bcc = Arrays.asList("user@example.com").stream().toArray(String[]::new);
            message.setRecipients(Message.RecipientType.BCC, Arrays.stream(bcc).map(InternetAddress::new).toArray(InternetAddress[]::new));
        } finally {
            if (transport != null) {
                try {
                    transport.close();
                } catch (final MessagingException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }
}

由于以下错误,此操作无法编译。

未处理的异常类型AddressException

我研究了一些,所有的解决方案都只是将检查的异常包装在自定义方法中的运行时异常中。我想避免为那些东西编写额外的代码。这类案件有没有规范的处理方式?

到目前为止我所做的是

message.setRecipients(Message.RecipientType.BCC,
        Arrays.stream(bcc).map(e -> {
            try {
                return new InternetAddress(e);
            } catch (final AddressException exc) {
                throw new RuntimeException(e);
            }
        }).toArray(InternetAddress[]::new));

但看起来不太好。我可以发誓,在其中一个教程中,我看到了rethrow或类似内容的标准内容。

共有1个答案

皇甫飞宇
2023-03-14

您可能会使用一些try 容器。有几个已经编写的实现。例如:

  • https://github.com/javaslang/javaslang/blob/master/javaslang/src/main/java/javaslang/control/try.java
  • https://github.com/hiro0107/java8-try-monad/blob/master/src/main/java/com/github/hiro0107/trymonad/try.java

或者你可以自己写。

 类似资料:
  • 我有一些代码抛出一个检查异常。我想在lambda中调用该代码,以便从另一个映射创建一个映射: 其中是引发异常的代码: 现在编译器肯定会抱怨没有处理异常。所以我用一个来包围它,看起来很难看: 因为我们需要返回-case中的内容。然而,在这种例外情况下,返回任何内容都没有多大意义,这就是为什么我实际上不想在该级别处理异常。难道我不能在我创建lambda的调用代码中处理异常吗?所以说只是上面一层? 但这

  • 我试图在lambda内部抛出一个异常,但它总是给我一个错误,表示未处理的IOException。 有人能告诉我我做错了什么吗?

  • 我怎样才能用Java8做到这一点呢?

  • 我有metohod myservice#create,它抛出CustomException。我在可选#map中调用此方法,如下所示: 当我用引起异常的参数调用这个方法时,就会捕获CustomException,但结果是操作成功,状态为200。如何在lambda中处理此异常并返回异常消息?

  • 假设您有一个第三方库,它公开了下一个接口。 代码无法编译,因为Function不知道如何处理由domap声明的CheckedException。我想出了两个可能的解决方案。 解决方案#1-包装调用 解决方案#2-编写实用程序方法

  • 异常检测与处理 [MCE] mce=off 彻底禁用MCE(CONFIG_X86_MCE) [MCE] mce=dont_log_ce 不为已纠正错误(corrected error)记录日志。 [MCE] mce=容错级别[,超时] 容错级别(还可通过sysfs设置): 0 在出现未能纠正的错误时panic,记录所有已纠正的错误 1(默认值) 在出现未能纠正的错误时panic或SIGBUS,记录