代码正在破坏Eclipse编译器

时间:2016-08-12 19:38:00

标签: java eclipse lambda compilation java-8

在使用lambda表达式的过程中,我创建了以下代码:

 Supplier<Map<String, Function<UserNetworkEntry, Boolean>>> _groupBuilder = () -> {Arrays.stream(UserType.values())
            .collect(Collectors.toMap(
                    value -> value.toString(),
                    value -> (UserNetworkEntry entry) -> entry.userType == value)))
            .putAll(_usersModel._users.stream()
                    .map(user -> user.organization)
                    .distinct()
                    .collect(Collectors.toMap(
                            organization -> organization, 
                            organization -> entry -> entry.organization.equals(organization))));};
        System.notAPartOfTheSystem.println("Hm");
        int word = "String";

正如你可能在最后两行看到的那样,这真的,真的不应该编译。问题是它确实如此:根据Eclipse(Neon),上面的代码类型检查,编译甚至运行。 (运行时行为也很奇怪;直到_groupBuilder=行的方法执行,但是该方法安静地返回而不执行任何进一步的代码...没有抛出错误。而且,我发现我可以将代码复制并粘贴到任何地方,并将获得相同的行为。

(顺便说一下,最好不要担心代码试图做什么。我知道这很糟糕,这只是我玩的东西。)

我很确定我在Eclipse / Java编译器中发现了一个错误,但我想更多地了解这里发生了什么。特别是,Eclipse的语法检查在“放弃”之后仍然会为语句做一些事情 - 它仍然会识别不匹配的括号,例如,类型检查器的域中没有任何内容。

有谁可以解释这里发生的事情?

0 个答案:

没有答案