Java 未处理异常的问题(与 lambda 的功能接口)

Java issue with Exception not being handled (functional interface with lambdas)

我真的需要一些帮助。 这是我的功能界面:

/**
 * This class represents a filter.
 */
@FunctionalInterface
interface FileFilter {
    /**
     * This method gets a file path and filters it in some method.
     * @return a list of the remaining files after this filter.
     * @throws IOException
     */
    abstract boolean filter(Path path) throws IOException;
}

这是我编写的 lambda 函数:

    static FileFilter modeFilter(String value, boolean containsNo, Predicate<Path> pathMethod)
    throws IOException{
        if (value.equals(YES)) {
            if (containsNo) {
                return path -> !pathMethod.test(path);
            } else {
                return path -> pathMethod.test(path);
            }
        }

        if (containsNo) {
            return path -> pathMethod.test(path);
        }
        return path -> !pathMethod.test(path);
    }

我给过滤器这个参数:

Filters.modeFilter(commandParts[1], containsNOT, x -> Files.isHidden(x))

问题是我在 Files.isHidden 中收到一个编译错误,指出有一个异常未处理 - IOExeption。

我确保调用 modeFilter 的方法抛出 IOExeption,所以这不是问题所在。 我该如何解决?

谢谢。

您的方法采用 Predicate<Path> 作为参数。

谓词函数的签名是

boolean test(T)

但是Files.isHidden的签名是

boolean isHidden(Path path) throws IOException

所以它们不匹配:谓词不应该抛出 IOException,但 Files.isHidden() 可以。

解决方案:传递 FileFilter 作为参数,而不是 Predicate<File>,因为存在 FileFilter 的唯一原因恰恰是它可以抛出 IOException,这与 Predicate 不同。

请注意,modeFilter 方法没有理由抛出 IOException:它所做的只是创建一个 FileFilter。它从不调用它。所以它不可能抛出 IOException。