【发布时间】:2014-06-09 23:25:39
【问题描述】:
我正在使用 ajc 1.8、java 8 并遇到编译器问题。这是示例代码。
public class ExecutorTests {
List<Runnable> tasks = Arrays.asList(
() -> {
System.out.println("task1 start");
try {
Thread.sleep(1000);
} catch (Exception ignored) {}
System.out.println("task1 end");
},
() -> {
System.out.println("task2 start");
try {
Thread.sleep(1000);
} catch (Exception ignored) {}
System.out.println("task2 end");
},
() -> {
System.out.println("task3 start");
try {
Thread.sleep(1000);
} catch (Exception ignored) {}
System.out.println("task3 end");
}
);
@Test
public void executeInSync(){
tasks.stream().forEach(Runnable::run);
}
}
这段代码使用 javac 正确编译和执行,同时 ajc 失败并显示以下内容:
如果我用匿名类替换 lambda,这将编译并运行,但我想找到不会强迫我返回匿名类、任何 vm 参数或任何其他解决方法的解决方法?
我最近使用 -noverify 标志解决了使用 ajc 的 java 8 代码编译问题。
也许我会使用加载时间编织来解决所有问题?
【问题讨论】:
-
一种解决方法可能是将 lambda 表达式提取到它们自己的
Runnable变量中,然后将变量添加到列表而不是直接添加 lambda。
标签: java lambda aspectj java-8