You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@groovy.apache.org by OCsite <oc...@ocs.cz> on 2024/11/23 15:53:04 UTC
Override new (was: [EXT] Using `var` as method return type placeholder)
Hi there,
> On 23. 11. 2024, at 4:12, MG <mg...@arscreat.com> wrote:
> Groovy new can be overridden to return a different type on purpose
can it? How? (Aside of an ASTT which would be a bit at the complex side for such a trivial thing.) I must have missed this thing in the documentation somewhere, and searching the documentation for “new” or “override” does not really help for obvious reasons :)
I am using consistently newInstance in my code so that I can override it easily if need be; a possibility to use the plain ole new same way would be nice, especially when working with a legacy code.
Thanks,
OC
Re: Override new
Posted by MG <mg...@arscreat.com>.
Hi OC,
I had to check (since I don't use code like that), and it is not
overriding/overloading the new operator per se, but replacing a ctor of
a class through its metaClass (see code below).
Cheers,
mg
import groovy.transform.Canonical
@Canonical class Goo { String s }
@Canonical class FooFoo { String s }
Goo.metaClass.constructor = { String s -> new FooFoo(s) }
final goo = new Goo("abc")
println SV(goo,goo.getClass()) // goo=FooFoo(abc), goo.getClass()=class
FooFoo
println SV(new Goo("abc")) // new Goo(abc)=FooFoo(abc)
println SV(new Goo("abc").getClass()) // new Goo(abc).getClass()=class
FooFoo
On 23/11/2024 16:53, OCsite wrote:
> Hi there,
>
>> On 23. 11. 2024, at 4:12, MG <mg...@arscreat.com> wrote:
>> Groovy new can be overridden to return a different type on purpose
>
> can it? How? (Aside of an ASTT which would be a bit at the complex
> side for such a trivial thing.) I must have missed this thing in the
> documentation somewhere, and searching the documentation for “new” or
> “override” does not really help for obvious reasons :)
>
> I am using consistently /newInstance/ in my code so that I can
> override it easily if need be; a possibility to use the plain ole
> /new/ same way would be nice, especially when working with a legacy code.
>
> Thanks,
> OC