Java 8代码阅读

标签 java java-8

<分区>

这段Java代码很难理解。这个 DirExplorer 是如何创建的?类 DirExplorer 链接是 https://github.com/ftomassetti/analyze-java-code-examples/blob/master/src/main/java/me/tomassetti/support/DirExplorer.java 干杯, 代码如下:

 new DirExplorer((level, path, file) -> path.endsWith(".java"), (level, path, file) -> {
        System.out.println(path);
        System.out.println(Strings.repeat("=", path.length()));
        try {
            new VoidVisitorAdapter<Object>() {
                @Override
                public void visit(ClassOrInterfaceDeclaration n, Object arg) {
                    super.visit(n, arg);
                    System.out.println(" * " + n.getName());
                }
            }.visit(JavaParser.parse(file), null);
            System.out.println(); // empty line
        } catch (ParseException | IOException e) {
            new RuntimeException(e);
        }
    }).explore(projectDir);

最佳答案

让我们将代码重构为旧式以便于理解:

Filter filter = new Filter() {
    @Override
    public boolean interested(int level, String path, File file) {
        return path.endsWith(".java");
    }
};

FileHandler fileHandler = new FileHandler() {
    @Override
    public void handle(int level, String path, File file) {
        // Your long implementation for FileHandler
    }
};
new DirExplorer(filter, fileHandler).explore(projectDir);

变量 filter 是实现接口(interface) Filter 的匿名类的实例,接口(interface) Filter 只有一个方法,所以在 Java 8 中它是一个functional interface ,上面的初始化代码可以缩短为lambda expression in Java 8到:

Filter filter = (level, path, file) -> path.endsWith(".java");

FileHandler fileHandler = (level, path, file) -> {
    // Your implementation for FileHandler
};
new DirExplorer(filter, fileHandler).explore(projectDir);

此外,您可以内联两个变量,这导致代码为:

new DirExplorer((level, path, file) -> path.endsWith(".java"), (level1, path1, file1) -> {
        // Your implementation for FileHandler
    }).explore(projectDir);

关于Java 8代码阅读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43012316/

相关文章:

java - 内容类型为 application/x-www-form-urlencoded 的 HTTP Post 请求在 Spring boot 服务中不起作用

java - 关于 Stream - IZ0-809 考试中 OCPJP 8 考试主题中提到的不存在的 merge() 方法

使用通用代码的 Java 单元测试

java - PreparedStatement setNull(..)

java - 我可以创建一个函数接口(interface)来存储对包含任意数量参数的方法的方法引用吗?

java - 使用 groovy actor 最大化数据库的吞吐量?

Java字符串编码

java-8 - 如何通过避免手动 sleep 来对 CompletableFuture.thenAccept() 进行单元测试

java - 如果值匹配条件并生成列表中值的逗号分隔列表,则为字符串添加后缀的最佳方法

sorting - 如何使用 Java 8 流按原始 int 成员对对象的 ArrayList 进行排序?