2010-05-26 12 views
6

Tutti,override un metodo in oggetti creati in modo statico

causa di un bug in una biblioteca che sto utilizzando, ho bisogno di eseguire l'override del metodo Dispose() su tutti gli oggetti che si estende una certa classe e ne fanno un NO- OPERAZIONE. So che se sto facendo nuove istanze delle classi direttamente, questo è facile da fare:

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

Il problema è che molte delle istanze di oggetti vengo non sono costruiti direttamente dal mio codice client, ma invece vengono creati tramite chiamate al metodo di libreria statica.

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

C'è un modo per iniettare il mio metodo Dispose in tale oggetto creato in modo statico senza modificare il codice sorgente originale?

+0

* "C'è un modo che posso [...] senza modificare il codice sorgente originale?" * - Lezione # 1 - evitare l'uso di librerie in cui non si ha almeno la possibilità di modificare il codice sorgente per correggere lo spettacolo -stopper bugs. –

risposta

1

È possibile utilizzare una libreria di manipolazione del codice byte come Javassist. È necessario recuperare il codice byte della classe LayerManagerLayer e iniettare il metodo di eliminazione.

Problemi correlati