J'aimerais substituer le constructeur d'une classe à tester. Je peux le faire comme ceci:Puis-je remplacer un constructeur en utilisant la métaprogrammation limitée à une portée dans groovy?
SomeClass.metaClass.constructor = { Map params ->
def instance = BeanUtils.instantiateClass(SomeClass)
instance.apply(params)
instance
}
Cela fonctionne, mais j'ai besoin que le nouveau constructeur ne s'applique qu'à certaines instances. En particulier, je voudrais limiter la portée de ce changement à une fermeture. J'ai essayé de faire une catégorie:
class SomeClassCategory {
static def constructor(instance, params) { }
}
use(SomeClassCategory) {
def x = new SomeClass(params)
}
Mais cela crée une méthode appelée constructor
au lieu d'un constructeur réel. Est-il possible de spécifier un constructeur dans une catégorie? Ou puis-je appliquer des modifications à la métaClasse de SomeClass uniquement dans un bloc comme la construction use(Category)
?