Uploaded image for project: 'Groovy'
  1. Groovy
  2. GROOVY-10270

Cannot initialize parameterized class with lambda without cast

    XMLWordPrintableJSON

Details

    Description

      I have the following Groovy program.

      import java.util.function.Function;
      
      
      @groovy.transform.TypeChecked
      class Main {
         static final void foo(Function<Short, Byte> x) {}
      
         public static final void main() {
           foo({Short y -> (Byte) y}) // works
           Cls cls = new Cls({Short y -> (Byte) y}) // works
           PCls<Function<Short, Byte>> pcls1 = new PCls<Function<Short, Byte>>({Short y -> (Byte) y} as Function<Short, Byte>) // works
           PCls<Function<Short, Byte>> pcls2 = new PCls<Function<Short, Byte>>({Short y -> (Byte) y}) // fails
         }
      }
      
      class Cls {
        public Function<Short, Byte> f
      
        public Cls(Function<Short, Byte> f) {
           this.f = f
        }
      }
      
      class PCls <T> {
         public T f
      
         public PCls(T f) {
            this.f = f
         }
      }
      

      Actual Behavior

      The program does not compile, and I get the following error.

      org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
      Main.groovy: 14: [Static type checking] - Cannot call PCls#<init>(java.util.function.Function<java.lang.Short, java.lang.Byte>) with arguments [groovy.lang.Closure]
      @ line 14, column 41.
      unction<Short, Byte>> pcls2 = new PCls<F
      ^
      
      1 error
      
      

      Expected Behavior

      Compile successfully.

      Comment

      Tested against 4-beta-1, 4-alpha-3, 3.0.9, and master (commit: b26dbbeabe1e3d27d30c936701b1a571e24d5ab2). Maybe similar to GROOVY-10254, but with parameterized class.

      Attachments

        Activity

          People

            emilles Eric Milles
            schaliasos Stefanos Chaliasos
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: