为什么我不能在使用 toRealPath() 的方法中使用抛出 IOException,而是必须使用 try catch?[复制]

Why am I not able to use throws IOException in my method which uses toRealPath(), instead I have to use try catch? [duplicate]

提问人:apun bhagwan 提问时间:11/5/2023 最后编辑:Mark Rotteveelapun bhagwan 更新时间:11/5/2023 访问量:28

问:

import java.io.IOException;
import java.nio.file.*;

public class Rose {

    public void tendGarden(Path p) throws IOException {
        Files.walk(p,1)
                .map(q -> q.toRealPath())
                .forEach(System.out::println);
    }

    public static void main(String[] thorns) throws IOException {
        new Rose().tendGarden(Paths.get(thorns[0]));
    }
}

上面的代码因为 q.toRealPath() 而没有编译,而是抛出 java: unreported exception java.io.IOException;必须被抓住或宣布被扔掉。而我已经把它扔给 main 方法,而 main 方法正在把它扔到 java 环境中。我在某处读到,由于使用接口作为方法签名,我无法使用抛出。有人可以解释一下原因吗?

Java 异常 路径 nio ioexception

评论

2赞 Mark Rotteveel 11/5/2023
问题在于,使用的功能接口不允许您抛出已检查的异常,因此您必须在 lambda 中处理它们。也就是说,我什至认为没有必要打电话到这里。maptoRealPath
0赞 apun bhagwan 11/5/2023
我只是在探索如何为 lambda 表达式抛出一个选中的异常,结果发现 java 不支持在 lambdas/stream 中抛出一个选中的异常,而是我必须使用 try, catch。
0赞 apun bhagwan 11/5/2023
stackoverflow.com/questions/27644361/......
0赞 apun bhagwan 11/5/2023
将关闭问题,因为该功能在 Java 端不可用
0赞 Mark Rotteveel 11/5/2023
Lambda 确实支持它,但前提是函数接口的抽象方法具有合适的子句,而 Java 本身定义的函数接口不这样做。您必须定义自己的功能接口才能做到这一点,这意味着您只能将它们与自己的 API 一起使用,而不能与 Java 本身定义的 API 一起使用。顺便说一句:您的问题已经关闭,无需删除:它可以作为其他搜索相同问题的人的路标。throws

答: 暂无答案