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。
我真的需要一些帮助。 这是我的功能界面:
/**
* 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。