2010-05-26 6 views
6

Tous,Surcharger une méthode dans les objets créés statiquement

En raison d'un bogue dans une bibliothèque que je utilise, je dois passer outre la méthode Dispose() sur tous les objets étendant une certaine classe et en faire un NO- OP. Je sais que si je fais de nouvelles instances des classes directement, cela est facile à faire:

layerManager = new LayerManagerLayer(wwd) { 
    @Override 
    public void dispose() {} 
}; 

Le problème est que beaucoup des instances d'objets que je reçois ne sont pas construits directement par mon code client, mais à la place sont créés via des appels de méthode de bibliothèque statique.

// Here I want to override the dispose method, but I cannot. 
Layer l = ShapefileLoader.makeShapefileLayer(this.getClass().getResource("polylines10.shp")); 

Est-il possible que je peux injecter ma méthode de cet objet dans Éliminez statiquement créé sans modifier le code source original?

+0

* "Y a-t-il un moyen de [...] modifier le code source d'origine?" * - Leçon 1 - évitez d'utiliser des bibliothèques où vous n'avez pas au moins la possibilité de modifier le code source Bugs-stopper. –

Répondre

1

Vous pouvez utiliser une bibliothèque de manipulation de code d'octet telle que Javassist. Vous devez récupérer le code d'octet de votre classe LayerManagerLayer et lui injecter la méthode disposer.

Questions connexes