在使用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的语法检查在“放弃”之后仍然会为语句做一些事情 - 它仍然会识别不匹配的括号,例如,类型检查器的域中没有任何内容。
有谁可以解释这里发生的事情?