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

Raw inner class constructor ref should not perform diamond inference

    XMLWordPrintable

    Details

      Description

      See JDK-8029632 for a spec clarification: a constructor ref qualified by a raw type cannot perform diamond inference if that raw type is a non-static member of a raw type. Instead, it should be treated like a raw constructor invocation.

      class Outer<T> {
        class Inner1 {}
        class Inner2<U> {}

        // expected/actual: ok
        Supplier<Outer.Inner1> s1 = Outer.Inner1::new;
        // expected/actual: ok
        Supplier<Outer.Inner2> s2 = Outer.Inner2::new;
        // expected: unchecked conversion; actual: ok
        Supplier<Outer<T>.Inner1> s3 = Outer.Inner1::new;
        // expected: unchecked conversion; actual: inference error
        Supplier<Outer<T>.Inner2<String>> s4 = Outer.Inner2::new;
      }

      The inference error in the last case above makes it clear that javac is trying to perform diamond inference here.

        Attachments

          Issue Links

            Activity

              People

              Assignee:
              vromero Vicente Arturo Romero Zaldivar
              Reporter:
              dlsmith Dan Smith
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Dates

                Created:
                Updated: