Java:如何将类传递给 lambda

标签 java lambda java-8

我尝试使用以下代码更轻松地创建多个目录和文件:

package ro.ex;

class File {

    public interface Lamb {
        public void call(Class c);
    }

    public static void tap(Lamb l) {
        l.call(File.class);
    }

    public static void mkdir(String path) {
    }

    public static void main(String[] args) {
        File.tap((f) -> {
            f.mkdir("dir");
            f.mkdir("dir2");
        });
    }
}

但是在f.mkdir("dir")中,intellij idea raise无法解析方法'mkdir'

我的问题是:如何更改代码以使主 block 中的代码正常工作

最佳答案

根据方法约定,File.tap() 接受一个 Lamb 参数。

Lamb 是一个函数式接口(interface)(仅包含一个抽象方法),而 lambda 的主体是其抽象方法的匿名实现。

抽象方法有一个定义public void call(Class c),这就是您的代码无法编译的原因。您正在尝试传递一个 File 对象,而不是一个 Class 对象。

同时,mkdir是一个静态方法,可以像这样调用:

public static void main(String[] args) {
    File.tap((f) -> {
        File.mkdir("dir");
        File.mkdir("dir2");
    });
}

关于Java:如何将类传递给 lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26826543/

相关文章:

java - ZonedDateTime 如何设置最短或最长时间?

java - 当我从扫描仪读取时出现奇怪的输出

c++ - 如何将 lambda 与模板化 std::unique_ptr 一起使用?

java - 为什么 java 8 lambdas 允许访问非最终类变量?

macos - 如何在 OS-X 上同时运行两个不同版本的 Java?

java - 批量更新列表然后加入回来

java - 如何开始新 Activity 并等待一段时间再开始另一 Activity ?

java - Eclipse IAutoEditStrategy 仅在退格时调用;如何让它调用所有编辑?

java - Spring BasicProcessingFilter 迁移到 Spring Security 4

Java 8 使用 Lambda 将整数转换为字符串