« Return to Thread: Method created via ExpandoMetaClass is not recognized

Re: Method created via ExpandoMetaClass is not recognized

by Jochen Theodorou :: Rate this Message:

Reply to Author | View in Thread

Setya schrieb:

> Hi all,
>
> I'm trying to implement Java interface with Groovy as follows:
>
> //MyGroovyClassImpl.groovy
> class MyGroovyClassImpl implements MyJavaInterface
> {
>   MyGroovyClassImpl()
>   {
>  MyGroovyClassImpl.metaClass.getNext = {-> println 'This is next
> command.';}    
>   }
> }
[...]

please try:

> //MyGroovyClassImpl.groovy
> class MyGroovyClassImpl implements MyJavaInterface
> {
>   MyGroovyClassImpl()
>   {
>  MyGroovyClassImpl.metaClass.getNext = {-> println 'This is next command.';}
>         this.metaClass = null    
>   }
> }

because at the point you add the method the class has already a per
instance meta class, but you call will only affect global meta
classes... also... do you really want to do that each time? how about

> //MyGroovyClassImpl.groovy
> class MyGroovyClassImpl implements MyJavaInterface {
>   static {
>       this.metaClass.getNext = {-> println 'This is next command.';}{
>   }
> }

then it will be executed only once and I think the hack with
this.metaClass = null is also not needed any more.

> The last line produces the following exception:
> groovy.lang.MissingPropertyException: No such property: next for class:
> ScriptExecutionContext
> at
> org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:50)
> at
> org.codehaus.groovy.runtime.ScriptBytecodeAdapter.getProperty(ScriptBytecodeAdapter.java:479)
> at Script1.run(Script1.groovy)
> at groovy.lang.GroovyShell.evaluate(GroovyShell.java:543)
> at groovy.lang.GroovyShell.evaluate(GroovyShell.java:518)
> ...
>
> I've added ExpandoMetaClass.enableGlobally(), but the problem persists.

you did, hmm..  so maybe I am wrong then... unless... is it the first
thing you do?

bye blackdrag

--
Jochen "blackdrag" Theodorou
The Groovy Project Tech Lead (http://groovy.codehaus.org)
http://blackdragsview.blogspot.com/
http://www.g2one.com/

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email


 « Return to Thread: Method created via ExpandoMetaClass is not recognized