我有一个类,用于遍历目录树,并在每个文件/目录上执行操作. 它看起来像这样:

class DirWalker {
  public static void walkDirs(Path startingPath, Consumer<Path> vAction)  {...}
}

在另一堂课上,我有以下内容:

public static Consumer<Path> doVisit = p -> {...}

我try 在我的Java代码中使用它,如下所示:

DirWalker.walkDirs(/* a path */, MyClass::doVisit);

然而,我在这里得到了一个错误,说‘MyClass没有定义适用于这里的doViite(路径)’.我可以将doVisit个成员更改为一个方法,它可以工作.

如果我在walkDirs调用中使用一个lambda内联,它会很好地工作. 但是创建一个Consumer的实例并将其传递给walkDirs方法失败. 为什么会出现这种情况?

推荐答案

只有当doViite是一个方法时,才会使用方法引用语法(MyClass::doVisit).正如您声明的那样,doViite是一个字段,应该作为MyClass.doVisit进行访问

如果要使用方法引用语法,可以将其编写为满足Consumer<Path>接口的方法,而不是内联lambda表达式,如下所示

public static void doVisit(Path p) {
    ...
}

Java相关问答推荐

Spring安全实现多个SQL表身份验证

如何调用Firebase Realtime Database中的子图像列表到android studio中的回收器视图?

Spring和可编辑";where";@Query

Java中将文本拆分为数字或十进制数字和字符串

匹配一组字符或另一组字符

扩展视图高度,并将其拖动到较低的视图上,而不是将其向下推?

如何在Jooq中获取临时表列引用?

当我在Java中有一个Synchronized块来递增int时,必须声明一个变量Volatile吗?

IntelliJ IDEA中的JavaFX应用程序无法在资源中找到CSS文件

判断重复的两个二维表算法?

RestTemplate Bean提供OkHttp3ClientHttpRequestFactory不支持Spring Boot 3中的请求正文缓冲

我该如何为我的类编写getter和setter方法?

不能在 map 上移除折线

为什么JavaFX MediaPlayer音频播放在Windows和Mac上运行良好,但在Linux(POPOS/Ubuntu)上却有问题?

H2数据库仅支持%1个结果集?

Intellij 2023 IDE:始终在顶部显示菜单栏

MapStruct记录到记录的映射不起作用

Java中计算大n和k值模10^9+7的二项式系数的乘法公式输出错误值

URI构造函数错误?

java构造函数中的冻结操作何时发生?