为了账号安全,请及时绑定邮箱和手机立即绑定

为什么Eclipse Java编译器(ecj)不能编译此文件?

为什么Eclipse Java编译器(ecj)不能编译此文件?

慕森王 2021-04-08 18:15:00
我有以下代码:package test;import java.util.stream.IntStream;public class A {    public static void main(String[] args) {        IntStream.range(0, 10).mapToObj(n -> new Object() {            int i = n;        }).mapToInt(o -> o.i).forEachOrdered(System.out::println);    }}使用javac 1.8.0_101编译时,此代码可以正常工作,并按预期产生数字0到9。但是当我在eclipse中使用此代码时,它在o.i以下位置告诉我:i cannot be resolved or is not a field并在执行此操作时产生错误:Exception in thread "main" java.lang.Error: Unresolved compilation problem:     i cannot be resolved or is not a field    at test.A.main(A.java:9)为什么需要使用javac来编译此代码?而我该如何使日食表现得更好呢?
查看完整描述

1 回答

?
MM们

TA贡献1886条经验 获得超2个赞

这是ecj中的错误,最近也报告为Bug 535969。

简而言之:为避免出现棘手的技术问题,编译器会在类型推断期间删除匿名类,并用其父类代替它(在特定情况下,并非总是如此)。这样,结果将mapToObj()被视为Stream<Object>确实应使用匿名类的地方。最初的评估认为此信息丢失是可以的(因为没有人可以提及匿名类),此问题中的示例证明这是错误的。


查看完整回答
反对 回复 2021-04-21
  • 1 回答
  • 0 关注
  • 209 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信