我有以下代碼: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編譯時,此代碼可以正常工作,并按預期產(chǎn)生數(shù)字0到9。但是當我在eclipse中使用此代碼時,它在o.i以下位置告訴我:i cannot be resolved or is not a field并在執(zhí)行此操作時產(chǎn)生錯誤: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來編譯此代碼?而我該如何使日食表現(xiàn)得更好呢?
1 回答

MM們
TA貢獻1886條經(jīng)驗 獲得超2個贊
這是ecj中的錯誤,最近也報告為Bug 535969。
簡而言之:為避免出現(xiàn)棘手的技術(shù)問題,編譯器會在類型推斷期間刪除匿名類,并用其父類代替它(在特定情況下,并非總是如此)。這樣,結(jié)果將mapToObj()
被視為Stream<Object>
確實應使用匿名類的地方。最初的評估認為此信息丟失是可以的(因為沒有人可以提及匿名類),此問題中的示例證明這是錯誤的。
添加回答
舉報
0/150
提交
取消