首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 8代码读取

Java 8代码读取
EN

Stack Overflow用户
提问于 2017-03-25 03:48:33
回答 2查看 231关注 0票数 3

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

代码语言:javascript
复制
 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);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-25 05:17:44

让我们将代码重构为旧风格,以便更容易理解:

代码语言:javascript
复制
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是实现接口Filter的匿名类的实例,接口Filter只有一个方法,因此在Java8中它是一个功能接口Java 8中的lambda表达式可以将上面的初始化代码缩短为:

代码语言:javascript
复制
Filter filter = (level, path, file) -> path.endsWith(".java");

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

此外,还可以内联这两个变量,这将导致代码如下:

代码语言:javascript
复制
new DirExplorer((level, path, file) -> path.endsWith(".java"), (level1, path1, file1) -> {
        // Your implementation for FileHandler
    }).explore(projectDir);
票数 6
EN

Stack Overflow用户

发布于 2017-03-25 05:01:33

当它很难读的时候,我把它分解成更小、更易读的部分。这更容易理解吗?

代码语言:javascript
复制
    Filter filter  = (level, path, file) -> path.endsWith(".java");
    FileHandler fileHandler = (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);
        }
    };

    new DirExplorer(filter, fileHandler).explore(projectDir);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43012316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档