Has anyone ever tried to intercept the constructors for ArrayList? I would like to intercept them, and call asImmutable() on them, to be a bit more functional. And just general curiosity.
According to the shell, there are three constructors for ArrayList: groovy:000> ArrayList.class.getConstructors() ===> [public java.util.ArrayList(java.util.Collection), public java.util.ArrayList(), public java.util.ArrayList(int)] I have been able to write code to intercept the null and the int: java.util.ArrayList.metaClass.constructor = { -> println "Intercepting constructor call" constructor = ArrayList.class.getConstructor( null ) constructor.newInstance( ).asImmutable() } java.util.ArrayList.metaClass.constructor = { int arg -> println "Intercepting int constructor call" constructor = ArrayList.class.getConstructor( int ) constructor.newInstance( arg ).asImmutable() } But I cannot figure out how to intercept the java.util.ArrayList(java.util.Collection). Here are a couple of attempts: java.util.ArrayList.metaClass.constructor = { java.util.Collection arg -> println "Intercepting Collection call, here is arg: ${arg.class.name}" constructor = ArrayList.class.getConstructor( java.util.Collection ) println "just made constructor: ${constructor}" constructor.newInstance( arg ).asImmutable() } java.util.ArrayList.metaClass.constructor = { Object[] arg -> println "Intercepting Second Collection call" constructor = ArrayList.class.getConstructor( java.util.Collection ) println "just made constructor: ${constructor}" constructor.newInstance( arg ).asImmutable() } I can intercept the java.util.Collection constructor with a closure, but I would like to be able to get it with metaprogramming. def collConst = ArrayList.class.getConstructor( java.util.Collection ) def constQ = { Object[] args -> collConst.newInstance( args ).asImmutable() } def firstQ = constQ( [ 1, 2, 3, "kkkkk" ] ) = Eric MacAdie