我正在使用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失败并显示以下内容:
如果我用匿名类替换lambdas,这将编译并运行,但是我想找到一种解决方法,它不会强迫我回到匿名类,任何vm参数或任何其他解决方法?
我最近使用-noverify标志解决了带有ajc的java 8代码编译问题。
也许我会使用加载时间编织摆脱所有问题?
答案 0 :(得分:3)
显然target typing / type inference在这里没有工作(我不知道为什么),尽管您声明List<Runnable>
为结果,但是通用类型{{1无法确定您要实现的功能接口。
我不确定这是否有效,但您可以手动将Arrays.asList
方法的泛型类型设置为asList
。要做到这一点只需写
Runnable