Java lambda表达式和switch语句导致eclipse崩溃正常吗?

Java lambda表达式和switch语句导致eclipse崩溃正常吗?,java,eclipse,Java,Eclipse,我就是搞不清楚是什么导致了eclipse中的堆栈溢出问题。其实我知道,但我不知道为什么。我尝试了以下方法: 重新启动我的电脑-呸 Eclipse.exe-清除 重新安装了一个新的eclipse 每次都测试完全相同的代码,每次都是完全相同的代码使eclipse崩溃。代码是一个lambda表达式。在我按下句点键“.”完成switch语句中的代码之前,这一切都很好 我的代码是: albumList.getSelectionModel().selectedItemProperty() .

我就是搞不清楚是什么导致了eclipse中的堆栈溢出问题。其实我知道,但我不知道为什么。我尝试了以下方法:

  • 重新启动我的电脑-呸
  • Eclipse.exe-清除
  • 重新安装了一个新的eclipse
  • 每次都测试完全相同的代码,每次都是完全相同的代码使eclipse崩溃。代码是一个lambda表达式。在我按下句点键“.”完成switch语句中的代码之前,这一切都很好
  • 我的代码是:

    albumList.getSelectionModel().selectedItemProperty()
            .addListener((ObservableValue obs, AbstractAlbum oldAlbum, AbstractAlbum selectedAlbum) -> {
         switch (type){
             test. // It doesn't matter what variable I use, valid or not, after the dot, eclipse crashes       
         }
    });
    
    我找不到我的代码有任何错误。我在这里遵循了这个教程:它也有一个lambda表达式。我试图在此代码中添加一个开关,但它再次崩溃:

    lastNameColumn.setCellValueFactory(cellData -> {
        switch (type){
            test. // again it crashed after a dot
        }
    });
    
    有人能确认他们是否能复制这个吗?我正在使用一个全新的Eclipse:Luna for java developer 64x—最新的包。以下是eclipse的日志:

    !ENTRY org.eclipse.ui 4 0 2014-11-28 22:19:08.889
    !MESSAGE Unhandled event loop exception
    !STACK 0
    org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.StackOverflowError)
        at org.eclipse.swt.SWT.error(SWT.java:4441)
        at org.eclipse.swt.SWT.error(SWT.java:4356)
        at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:139)
        at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4147)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3764)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1151)
        at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1032)
        at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:148)
        at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:636)
        at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
        at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:579)
        at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
        at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:135)
        at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:648)
        at org.eclipse.equinox.launcher.Main.basicRun(Main.java:603)
        at org.eclipse.equinox.launcher.Main.run(Main.java:1465)
    Caused by: java.lang.StackOverflowError
        at org.eclipse.jdt.internal.codeassist.UnresolvedReferenceNameFinder.visit(UnresolvedReferenceNameFinder.java:292)
        at org.eclipse.jdt.internal.compiler.ast.Block.traverse(Block.java:138)
        at org.eclipse.jdt.internal.compiler.ast.Initializer.traverse(Initializer.java:130)
        at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.traverse(TypeDeclaration.java:1427)
        at org.eclipse.jdt.internal.compiler.ast.QualifiedAllocationExpression.traverse(QualifiedAllocationExpression.java:603)
        at org.eclipse.jdt.internal.compiler.ast.LambdaExpression.traverse(LambdaExpression.java:645)
        at org.eclipse.jdt.internal.compiler.ast.MessageSend.traverse(MessageSend.java:1015)
        at org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.traverse(MethodDeclaration.java:347)
        at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.traverse(TypeDeclaration.java:1434)
        at org.eclipse.jdt.internal.compiler.ast.QualifiedAllocationExpression.traverse(QualifiedAllocationExpression.java:603)
        at org.eclipse.jdt.internal.compiler.ast.LambdaExpression.traverse(LambdaExpression.java:645)
        at org.eclipse.jdt.internal.compiler.ast.MessageSend.traverse(MessageSend.java:1015)
        at org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.traverse(MethodDeclaration.java:347)
        at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.traverse(TypeDeclaration.java:1434)
        at org.eclipse.jdt.internal.compiler.ast.QualifiedAllocationExpression.traverse(QualifiedAllocationExpression.java:603)
        at org.eclipse.jdt.internal.compiler.ast.LambdaExpression.traverse(LambdaExpression.java:645)
        at org.eclipse.jdt.internal.compiler.ast.MessageSend.traverse(MessageSend.java:1015)
        at org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.traverse(MethodDeclaration.java:347)
        at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.traverse(TypeDeclaration.java:1434)
        at org.eclipse.jdt.internal.compiler.ast.QualifiedAllocationExpression.traverse(QualifiedAllocationExpression.java:603)
    

    也许时间可以治愈一切创伤?:-)


    我使用EclipseNeon3,Java 8的所有内容辅助功能都很好……

    您可能在Eclipse中发现了一个bug。打开错误报告;)好。。。我希望那不是一只虫子。在没有switch语句的情况下,我如何编写代码:(…缺少更改IDE…在解决此问题之前,我可能必须禁用内容辅助:(使用
    Collectors
    中的
    groupingBy
    方法来创建与每个切换原因匹配的对象组。然后为每个组调用您的代码。我以前从未使用过收集器。您能举个例子说明如何使用它来替换切换语句吗?两年后和主要版本之后,这种情况仍在发生。真是疯狂的Eclipse仍然不能处理Lambda表达式!我正在使用Eclipse Oxygen和Eclipse Neon,它们都在Lambda forEach内的一个开关上崩溃。