Thodoris Sotiropoulos created GROOVY-11439:
----------------------------------------------

             Summary: closure is assignable to java.io.InputStream
                 Key: GROOVY-11439
                 URL: https://issues.apache.org/jira/browse/GROOVY-11439
             Project: Groovy
          Issue Type: Bug
          Components: Static Type Checker
            Reporter: Thodoris Sotiropoulos


I am not sure if this is an expected behavior or not, but a lambda expression 
is assignable to java.io.InputStream

 
{code:java}
class Test {
  public static void main(String[] args) {
    java.io.InputStream x = (int p, int p2) ->   p;
    System.out.println(x.read());
  }
} {code}
h3. Actual behavior

The code compiles, but I get the following exception at runtime
{code:java}
Exception in thread "main" groovy.lang.MissingMethodException: No signature of 
method: Test$_main_closure1.doCall() is applicable for argument types: () 
values: []
Possible solutions: doCall(int, int), isCase(java.lang.Object), 
isCase(java.lang.Object), findAll(), findAll(), findAll(groovy.lang.Closure)
    at 
org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:259)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1006)
    at groovy.lang.Closure.call(Closure.java:452)
    at InputStream1_groovyProxy.read(Unknown Source)
    at Test.main(test.groovy:4) {code}
h3. Expected behavior

The code should have been rejected.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to