我已经在jGRASP工作了一段时间,刚开始使用Java中的lambda表达式。我可以使用lambda表达式编译程序,但是当我尝试运行它们时,我总是会遇到这个错误:
在文件
中找不到主要方法,小程序或MIDlet
示例程序:
public class SquareComputer {
interface IntegerMath {
int operation(int a);
}
public int operateUnary(int a, IntegerMath op) {
return op.operation(a);
}
public static void main(String... args) {
SquareComputer myApp = new SquareComputer();
System.out.println(myApp.operateUnary(3, a -> a*a));
}
}
如果我注释掉最后一行,那么程序将按预期编译并运行(当然不做任何事情)。
请注意,此程序是Oracle tutorial here中Calculator计算器示例的简化版本。如果我使用整个Calculator程序,则会发生同样的事情:编译但无法找到要运行的主方法;但使用lambda表达式注释掉行,它运行正常。同样对于我正在努力的其他计划;使用lambda表达式编译的任何单行都会导致程序无法找到main方法。
这是jGRASP,我的Java安装,还是我的理解或其他问题?我该如何解决这个问题?
编辑:还有一些数据点:如果我有jGRASP显示UML图,那么带有lambda表达式的类被唯一标记为"外部类或接口" (没有lambda表达式,它通常标记为" Project Class")。
如果我尝试通过jGRASP创建一个JAR文件,使用正则表达式,最初jGRASP找不到主类;但是一旦我指定它,就会制作JAR类,并且我可以从jGRASP外部以我想要的行为成功运行它。
答案 0 :(得分:0)
我使用的是jGRASP的过时版本(从2013年开始,在2014年将lambda表达式引入Java之前,我相信)。将我的jGRASP安装更新到当前版本,清除了在编译lambda表达式时查找main类的问题。
所以:是,jGRASP目前支持lambda表达式(至少版本为2.0.1_09)。但不,它不是在Java中出现lambda表达式之前(版本2.0.0_03之后的某个时间)。