我尝试使用以下代码更轻松地创建多个目录和文件:
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/