groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Winnebeck, Jason" <Jason.Winneb...@windstream.com>
Subject RE: "External" closures, why?
Date Tue, 01 Dec 2015 21:16:35 GMT
Jochen's example never required a cast in any Groovy version because his method took Object
(a super type of Closure).

Had Jochen defined an interface, and defined the method to take the interface instead of Object
or Closure, then before 2.2 an explicit cast from Closure to the interface type would have
been required. After 2.2, Groovy implicitly converts the Closure to the interface type without
the cast.

Jason

-----Original Message-----
From: alessio [mailto:alessino@gmail.com] 
Sent: Tuesday, December 01, 2015 4:05 PM
To: users@groovy.apache.org
Subject: Re: "External" closures, why?

On Tue, Dec 1, 2015 at 9:48 PM, Winnebeck, Jason <Jason.Winnebeck@windstream.com> wrote:
> The explicit cast was needed before 2.2 only when you were trying to cast a Closure to
an instance of an interface (or other SAM type). In my example, the closure implicitly can
be casted to type X after 2.2. Before 2.2, you had to explicitly cast the closure to X.
>
> Jochen's example worked because he didn't declare the type of his parameter. When no
type is declared, "Object" is used, which will take the Closure directly.

So before 2.2 the cast was necessary in order to satisfy the method signature argument-wise,
with a single Object argument being the default (and hence not requiring a cast)? Did I get
that right?

----------------------------------------------------------------------
This email message and any attachments are for the sole use of the intended recipient(s).
Any unauthorized review, use, disclosure or distribution is prohibited. If you are not the
intended recipient, please contact the sender by reply email and destroy all copies of the
original message and any attachments.
Mime
View raw message