Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8320573

Unnamed variable in lambda map compiles but doesn't start

XMLWordPrintable

    • generic
    • generic

      ADDITIONAL SYSTEM INFORMATION :
      Windows 11 + WSL2 (Ubuntu 23.10) - compile and run on Ubuntu.
      Ubuntu's official openjdk-21-jdk package.

      A DESCRIPTION OF THE PROBLEM :
      When using an unnamed variable in a lambda function in Optional.map(), the compilation works smoothly, but when running the application, an exception occurres on application startup.

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      ofNullable(someHashMap.get("someKey"))
                      .filter(Predicate.isEqual("key"))
                      .map(_ -> getResponseIfExists())
                      .orElseGet(this::getResponseIfNotExists);

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      I except the compilation process to fail, if using unnamed variables is not allowed here, or running to work in the other case.
      ACTUAL -
      org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'methodValidationPostProcessor' defined in class path resource [org/springframework/boot/autoconfigure/validation/ValidationAutoConfiguration.class]: Unsatisfied dependency expressed through method 'methodValidationPostProcessor' parameter 0: Error loading class [my.patch.MyClass] for bean with name 'myClass' defined in file [/project_path/my/path/MyClass.clas]: problem with class file or dependent class
      at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:802)
      at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:546)
      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1336)
      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1166)
      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:563)
      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:523)
      at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325)
      at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
      at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323)
      at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:204)
      at org.springframework.context.support.PostProcessorRegistrationDelegate.registerBeanPostProcessors(PostProcessorRegistrationDelegate.java:265)
      at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:792)
      at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:600)
      at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)
      at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753)
      at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:455)
      at org.springframework.boot.SpringApplication.run(SpringApplication.java:323)
      at org.springframework.boot.SpringApplication.run(SpringApplication.java:1341)
      at org.springframework.boot.SpringApplication.run(SpringApplication.java:1330)
      at my.path(MainClass.java:10)
      Caused by: org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [my.path.MyClass] for bean with name 'myClass' defined in file [/project_path/my/path/MyClass.class]: problem with class file or dependent class
      at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1512)
      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineTargetType(AbstractAutowireCapableBeanFactory.java:686)
      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:654)
      at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1636)
      at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:560)
      at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:532)
      at org.springframework.beans.factory.BeanFactoryUtils.beanNamesForTypeIncludingAncestors(BeanFactoryUtils.java:260)
      at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1635)
      at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1395)
      at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1348)
      at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:911)
      at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:789)
      ... 19 common frames omitted
      Caused by: java.lang.ClassFormatError: Illegal field name "" in class my/path/MyClass
      at java.base/java.lang.ClassLoader.defineClass1(Native Method)
      at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1027)
      at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
      at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862)
      at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760)
      at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681)
      at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639)
      at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
      at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
      at java.base/java.lang.Class.forName0(Native Method)
      at java.base/java.lang.Class.forName(Class.java:534)
      at java.base/java.lang.Class.forName(Class.java:513)
      at org.springframework.util.ClassUtils.forName(ClassUtils.java:304)
      at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:476)
      at org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1573)
      at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1506)
      ... 30 common frames omitted

      CUSTOMER SUBMITTED WORKAROUND :
      ofNullable(someHashMap.get("someKey"))
                      .filter(Predicate.isEqual("key"))
                      .isPresent() ? getResponseIfExists() : getResponseIfNotExists();

      FREQUENCY : always


            adev Anupam Dev
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: