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

LambdaConversionException when using ::-Operator and Generics

    XMLWordPrintable

Details

    Description

      A DESCRIPTION OF THE PROBLEM :
      Calling a method via the ::-Operator on a parameter of a generic Type that implements an Interface and extends an abstract class throws a LambdaConversionException if the method is from the interface.

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Run the minimal example provided as source code using java 8

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      No crash
      ACTUAL -
      Exception in thread "main" java.lang.BootstrapMethodError: call site initialization exception
      at java.lang.invoke.CallSite.makeSite(CallSite.java:341)
      at java.lang.invoke.MethodHandleNatives.linkCallSiteImpl(MethodHandleNatives.java:307)
      at java.lang.invoke.MethodHandleNatives.linkCallSite(MethodHandleNatives.java:297)
      at Main.bar(Main.java:11)
      at Main.main(Main.java:20)
      Caused by: java.lang.invoke.LambdaConversionException: Invalid receiver type class Main$I; not a subtype of implementation type interface Main$J
      at java.lang.invoke.AbstractValidatingLambdaMetafactory.validateMetafactoryArgs(AbstractValidatingLambdaMetafactory.java:233)
      at java.lang.invoke.LambdaMetafactory.metafactory(LambdaMetafactory.java:303)
      at java.lang.invoke.CallSite.makeSite(CallSite.java:302)
      ... 4 more

      ---------- BEGIN SOURCE ----------
      public class Main {

        abstract static class I {
        }

        interface J {
          void foo();
        }

        static <T extends I & J> void bar(T t) {
          Runnable r = t::foo; //crashes
      // Runnable r = () -> t.foo(); //works fine
        }

        public static void main(String[] args) {
          class A extends I implements J {
            public void foo() {
            }
          }
          bar(new A());
        }
      }
      ---------- END SOURCE ----------

      CUSTOMER SUBMITTED WORKAROUND :
      Works in newer Java Versions than 8

      FREQUENCY : always


      Attachments

        Issue Links

          Activity

            People

              mchung Mandy Chung
              webbuggrp Webbug Group
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: